【Azure for IT Pro】診断モニタにアクセスするための PowerShell スクリプト

前回の投稿からかなり時間が経ってしまいました。

【Azure for IT Pro】Windows Azure Service Management(WASM) コマンドレット 使い始め

WASMにはさまざまなコマンドレットが用意されているのですが、今回は診断モニタに関するコマンドレットをご紹介します。

図5

Windows Azure のログは、診断モニタと呼ばれる機構により収集されて、ローカルのストレージを介してから Windows Azure ストレージに転送されるようになっています。

image

事前に、Visual Studio で以下の設定を行っておけば、細かな設定は後から PowrShell コマンドレットを使用して変更することができます。設定にあたっては、Windows Azure ストレージのアカウントとアクセスキーが必要なので、事前に準備しておきましょう。

image

image

診断モニタを使用して収集可能な診断ログは以下の5種類です。

ログのタイプ

ログの内容 設定するためのコマンドレット

備考

DiagnosticInfrastructureLogs 診断モニタ自身のログ。診断モニタの動作確認、トラブルシューティングに利用する Set-InfrastructureLog
Logs 診断モニタの各種設定(ローカルストレージのサイズや転送のタイミングなど)が書かれたログ Set-WindowsAzureLog
Directories 指定したディレクトリ配下のファイル(IISのアクセスログや独自のテキストログなど) Set-FileBasedLog テキストファイルに限らず収集可能
PerformanceCounters パフォーマンスモニターのカウンターを元に収集されたログ Set-PerformanceCounter
WindowsEventLogs イベントログ Set-WindowsEventLog

まず手始めに、指定したロールに設定されている診断ログの情報をかたっぱしから取得してみましょう。

まずは、以下のスクリプトを拡張子 .PS1 で保存してください。その際、赤で示した部分はご自身の環境の値を設定してください。

## Windows Azure Management Tools を読み込む Add-PSSnapin AzureManagementToolsSnapIn

## Windows Azure の サブスクリプションID、サービス名、Deployment ID、ロール名 $SubscriptionID="caf29b8c-26de-431d-xxxx-xxxxxxxxxxxx" $serviceName = "tfazureforitpro" $deployid = "d8316264497849f4xxxxxxxxxxxxxxx" $Role = "WebRole1"

## 格納先となるWindows Azure ストレージのアカウント名とキー $storage = "xxxxxxxxxxxxxxx" $key = "vHcvyMEyG63MzfWpxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxt8NMoPk4wp7kZJ4pWw=="

## 診断モニタが有効なロールインスタンスを取得して、それぞれの診断ログの設定値を取得する $RoleInstances = Get-DiagnosticAwareRoleInstances $Role -DeploymentId $deployid -StorageAccountName $storage -StorageAccountKey $key

$RoleInstances | foreach {

    $InstanceID = $_

    Write-Host "**************" $InstanceID "**************"

    write-host "--- DiagnosticInfrastructureLogs ---" $Config = Get-DiagnosticConfiguration -RoleName $Role -InstanceId $InstanceID -StorageAccountName $storage -StorageAccountKey $key -BufferName DiagnosticInfrastructureLogs -DeploymentId $deployId $Config | FL

    write-host "--- Directories ---" $Config = Get-DiagnosticConfiguration -RoleName $Role -InstanceId $InstanceID -StorageAccountName $storage -StorageAccountKey $key -BufferName Directories -DeploymentId $deployId $Config |FL $config.DataSources |FL

    write-host "--- Logs ---" $Config = Get-DiagnosticConfiguration -RoleName $Role -InstanceId $InstanceID -StorageAccountName $storage -StorageAccountKey $key -BufferName Logs -DeploymentId $deployId $Config | FL

    write-host "--- PerformanceCounters ---" $Config = Get-DiagnosticConfiguration -RoleName $Role -InstanceId $InstanceID -StorageAccountName $storage -StorageAccountKey $key -BufferName PerformanceCounters -DeploymentId $deployId $Config |FL $Config.DataSources | FL

    write-host "--- WindowsEventLogs ---" $Config = Get-DiagnosticConfiguration -RoleName $Role -InstanceId $InstanceID -StorageAccountName $storage -StorageAccountKey $key -BufferName WindowsEventLogs -DeploymentId $deployId $Config | FL $config.DataSources |FL }

PowerShell のコンソールを開いてスクリプトを実行すると、 $Role に指定したロールに含まれるすべてのロールインスタンスから設定情報を取得して画面に表示します(表示データを全く整形していないので見ずらいと思いますが)。

使用しているコマンドレットは2種類です。

Get-DiagnosticAwareRoleInstances は指定したロール($Role)に含まれている診断モニターが正常に動作しているロールイスタンスの一覧を返します。

返されたロールインスタンスの一覧を Foreach を使用して1つづつ取り出し、Get-DiagnosticConfiguration で各診断ログの設定情報を収集しています。ログの設定を行う場合には、ログのタイプごとにコマンドレットが用意されているのですが、情報を収集する場合にはこのコマンドレットに引数として –BufferName <ログのタイプ> を指定します。

Get-DiagnosticConfiguration からの戻り値は $Config という変数に格納していますが、PerformanceCounters や Directories のように複数の値(パフォーマンスカウンターやログが格納されているディレクトリ)を持つ者は DataSources プロパティを使用すると詳細な中身を確認することができます。DataSources プロパティは、設定を行う際にも使用するので覚えておいてください。

出力結果例を以下に示します。

************** WebRole1_IN_0 ************** --- DiagnosticInfrastructureLogs ---

ScheduledTransferLogLevelFilter : Verbose ScheduledTransferPeriod : 00:10:00 BufferQuotaInMB : 1024

--- Directories ---

DataSources : {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration, Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration, Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration} ScheduledTransferPeriod : 00:10:00 BufferQuotaInMB : 1024

Path : C:\Resources\directory\d8316264497849f4891e25fc3943ca09.WebRole1.DiagnosticStore\FailedReqLogFiles\Web Container : wad-iis-failed-logfiles DirectoryQuotaInMB : 1024

Path : C:\Resources\directory\d8316264497849f4891e25fc3943ca09.WebRole1.DiagnosticStore\LogFiles\Web Container : wad-iis-logfiles DirectoryQuotaInMB : 1024

Path : C:\test Container : tflogs DirectoryQuotaInMB : 1024

--- Logs ---

ScheduledTransferLogLevelFilter : Undefined ScheduledTransferPeriod : 00:10:00 BufferQuotaInMB : 1024

--- PerformanceCounters ---

DataSources : {Microsoft.WindowsAzure.Diagnostics.PerformanceCounterConfiguration, Microsoft.WindowsAzure.Diagnostics.PerformanceCounterConfiguration, Microsoft.WindowsAzure.Diagnostics.PerformanceCounterConfiguration} ScheduledTransferPeriod : 00:10:00 BufferQuotaInMB : 1024

SampleRate : 00:01:00 CounterSpecifier : \Processor(_Total)\% Processor Time

SampleRate : 00:01:00 CounterSpecifier : \Memory\Available Mbytes

SampleRate : 00:01:00 CounterSpecifier : \ASP.NET Applications(__Total__)\Requests/Sec

--- WindowsEventLogs ---

DataSources : {System!*, Application!*, Security!*} ScheduledTransferLogLevelFilter : Verbose ScheduledTransferPeriod : 00:10:00 BufferQuotaInMB : 1024

System!* Application!* Security!*

つづきは以下で
IT Pro (IT 担当者) のための Windows Azure Platform 運用管理ガイド 1.0 PowerShell による管理の自動化