PowerShell を使用した Azure Cloud Services (クラシック) での診断の有効化

重要

2024 年 9 月 1 日に、すべてのお客様に対して Cloud Services (クラシック) は非推奨になりました。 既存の実行中のデプロイはすべて Microsoft によって停止およびシャットダウンされ、2024 年 10 月以降、データは永久的に失われます。 新しいデプロイでは、新しい Azure Resource Manager ベースのデプロイ モデル、 Azure Cloud Services (延長サポート) を使用してください。

Azure Diagnostics 拡張機能を使用して、クラウド サービスからアプリケーション ログやパフォーマンス カウンターなどの診断データを収集できます。 この記事では、PowerShell を使用して Cloud Service の Azure Diagnostics 拡張機能を有効にする方法について説明します。 この記事で求められる前提条件については、 Azure PowerShell のインストールおよび構成方法 に関するページを参照してください。

Cloud Service のデプロイの一環としての診断拡張機能の有効化

この方法は、クラウド サービスのデプロイの一環として診断拡張機能を有効にすることができる継続的インテグレーション型のシナリオに適用できます。 新しい Cloud Service のデプロイを作成するときに、ExtensionConfiguration パラメーターを New-AzureDeployment コマンドレットに渡して診断拡張機能を有効にすることができます。 ExtensionConfiguration パラメーターは、 New-AzureServiceDiagnosticsExtensionConfig コマンドレットを使用して作成できるさまざまな診断構成を受け取ります。

次の例は、診断構成がそれぞれ異なる WebRole と WorkerRole を含むクラウド サービスの診断を有効にする方法を示しています。

$service_name = "MyService"
$service_package = "CloudService.cspkg"
$service_config = "ServiceConfiguration.Cloud.cscfg"
$webrole_diagconfigpath = "MyService.WebRole.PubConfig.xml"
$workerrole_diagconfigpath = "MyService.WorkerRole.PubConfig.xml"

$webrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WebRole" -DiagnosticsConfigurationPath $webrole_diagconfigpath
$workerrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WorkerRole" -DiagnosticsConfigurationPath $workerrole_diagconfigpath

New-AzureDeployment -ServiceName $service_name -Slot Production -Package $service_package -Configuration $service_config -ExtensionConfiguration @($webrole_diagconfig,$workerrole_diagconfig)

診断構成ファイルでストレージ アカウント名を設定した StorageAccount 要素を指定すると、New-AzureServiceDiagnosticsExtensionConfig コマンドレットでそのストレージ アカウントが自動的に使用されます。 この構成を機能させるには、ストレージ アカウントが、デプロイされるクラウド サービスと同じサブスクリプション内にある必要があります。

Azure SDK 2.6 以降では、MSBuild の発行先の出力によって生成された拡張構成ファイルに、サービス構成ファイル (.cscfg) で指定された診断構成文字列に基づくストレージ アカウント名が含まれます。 次のスクリプトは、クラウド サービスのデプロイ時に、発行先の出力の拡張機能構成ファイルを解析し、各ロールの診断拡張機能を構成する方法を示しています。

$service_name = "MyService"
$service_package = "C:\build\output\CloudService.cspkg"
$service_config = "C:\build\output\ServiceConfiguration.Cloud.cscfg"

#Find the Extensions path based on service configuration file
$extensionsSearchPath = Join-Path -Path (Split-Path -Parent $service_config) -ChildPath "Extensions"

$diagnosticsExtensions = Get-ChildItem -Path $extensionsSearchPath -Filter "PaaSDiagnostics.*.PubConfig.xml"
$diagnosticsConfigurations = @()
foreach ($extPath in $diagnosticsExtensions)
{
    #Find the RoleName based on file naming convention PaaSDiagnostics.<RoleName>.PubConfig.xml
    $roleName = ""
    $roles = $extPath -split ".",0,"simplematch"
    if ($roles -is [system.array] -and $roles.Length -gt 1)
    {
        $roleName = $roles[1]
        $x = 2
        while ($x -le $roles.Length)
            {
               if ($roles[$x] -ne "PubConfig")
                {
                    $roleName = $roleName + "." + $roles[$x]
                }
                else
                {
                    break
                }
                $x++
            }
        $fullExtPath = Join-Path -path $extensionsSearchPath -ChildPath $extPath
        $diagnosticsconfig = New-AzureServiceDiagnosticsExtensionConfig -Role $roleName -DiagnosticsConfigurationPath $fullExtPath
        $diagnosticsConfigurations += $diagnosticsconfig
    }
}
New-AzureDeployment -ServiceName $service_name -Slot Production -Package $service_package -Configuration $service_config -ExtensionConfiguration $diagnosticsConfigurations

Visual Studio Codespace でも、診断拡張機能を使用した Cloud Services の自動デプロイに同様のアプローチが使用されます。 完全な例については、「 Publish-AzureCloudDeployment.ps1 」を参照してください。

診断構成で StorageAccount を指定しなかった場合は、StorageAccountName パラメーターをコマンドレットに渡す必要があります。 StorageAccountName パラメーターを指定すると、このコマンドレットでは、診断構成ファイルに指定されたストレージ アカウントではなく、このパラメーターに指定されたストレージ アカウントが常に使用されます。

診断ストレージ アカウントがクラウド サービスと異なるサブスクリプションに属している場合は、StorageAccountName パラメーターと StorageAccountKey パラメーターをコマンドレットに明示的に渡す必要があります。 診断ストレージ アカウントが同じサブスクリプション内にある場合、診断拡張機能を有効にすると、コマンドレットによってキー値が自動的に照会され、設定されるため、StorageAccountKey パラメーターは必要ありません。 ただし、診断ストレージ アカウントが別のサブスクリプションに属している場合は、コマンドレットでキーを自動的に取得できないので、 StorageAccountKey パラメーターでキーを明示的に指定する必要があります。

$webrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WebRole" -DiagnosticsConfigurationPath $webrole_diagconfigpath -StorageAccountName $diagnosticsstorage_name -StorageAccountKey $diagnosticsstorage_key
$workerrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WorkerRole" -DiagnosticsConfigurationPath $workerrole_diagconfigpath -StorageAccountName $diagnosticsstorage_name -StorageAccountKey $diagnosticsstorage_key

既存の Cloud Service での診断拡張機能の有効化

Set-AzureServiceDiagnosticsExtension コマンドレットを使用して、既に実行されているクラウド サービスで診断構成を有効にしたり、更新したりできます。

警告

既存のロールで診断を有効にすると、パッケージがデプロイされるときに、既に設定してあるすべての拡張機能が無効になります。 これには以下が含まれます。

  • Microsoft Monitoring Agent 診断
  • Microsoft Azure セキュリティ監視
  • Microsoft Antimalware
  • Microsoft 監視エージェント
  • Microsoft Service Profiler Agent
  • Microsoft Azure ドメイン拡張機能
  • Microsoft Azure Diagnostics 拡張機能
  • Microsoft Azure リモート デスクトップ拡張機能
  • Microsoft Azure Log Collector

更新したロールをデプロイした後、Azure Portal または PowerShell で拡張機能を再度設定できます。

$service_name = "MyService"
$webrole_diagconfigpath = "MyService.WebRole.PubConfig.xml"
$workerrole_diagconfigpath = "MyService.WorkerRole.PubConfig.xml"

$webrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WebRole" -DiagnosticsConfigurationPath $webrole_diagconfigpath
$workerrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WorkerRole" -DiagnosticsConfigurationPath $workerrole_diagconfigpath

Set-AzureServiceDiagnosticsExtension -DiagnosticsConfiguration @($webrole_diagconfig,$workerrole_diagconfig) -ServiceName $service_name

診断拡張機能の現在の構成の取得

Cloud Service の現在の診断構成を取得するには、 Get-AzureServiceDiagnosticsExtension コマンドレットを使用します。

Get-AzureServiceDiagnosticsExtension -ServiceName "MyService"

診断拡張機能の削除

Cloud Service で診断を無効にするには、Remove-AzureServiceDiagnosticsExtension コマンドレットを使用します。

Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService"

Role パラメーターを指定せずに Set-AzureServiceDiagnosticsExtension または New-AzureServiceDiagnosticsExtensionConfig を使用して診断拡張機能を有効にした場合は、Role パラメーターを指定せずに Remove-AzureServiceDiagnosticsExtension を使用して拡張機能を削除できます。 拡張機能を有効にするときに Role パラメーターを使用した場合は、拡張機能を削除するときにもこのパラメーターを使用する必要があります。

個々のロールから診断拡張機能を削除するには、次のコマンドを実行します。

Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService" -Role "WebRole"

次のステップ