Włączanie diagnostyki w usłudze Azure Cloud Services (wersja klasyczna) przy użyciu programu PowerShell

Ważne

Cloud Services (wersja klasyczna) jest teraz przestarzała dla nowych klientów i zostanie wycofana 31 sierpnia 2024 r. dla wszystkich klientów. Nowe wdrożenia powinny korzystać z nowego modelu wdrażania opartego na usłudze Azure Resource Manager Azure Cloud Services (rozszerzona obsługa).

Możesz zbierać dane diagnostyczne, takie jak dzienniki aplikacji, liczniki wydajności itp. z usługi w chmurze przy użyciu rozszerzenia Diagnostyka Azure. W tym artykule opisano sposób włączania rozszerzenia Diagnostyka Azure dla usługi w chmurze przy użyciu programu PowerShell. Zobacz How to install and configure Azure PowerShell for the prerequisites needed for this article (Jak zainstalować i skonfigurować Azure PowerShell pod kątem wymagań wstępnych wymaganych w tym artykule).

Włączanie rozszerzenia diagnostyki w ramach wdrażania usługi Cloud Service

Takie podejście ma zastosowanie do typu ciągłej integracji scenariuszy, w których rozszerzenie diagnostyczne można włączyć w ramach wdrażania usługi w chmurze. Podczas tworzenia nowego wdrożenia usługi w chmurze można włączyć rozszerzenie diagnostyczne, przekazując parametr ExtensionConfiguration do polecenia cmdlet New-AzureDeployment . Parametr ExtensionConfiguration przyjmuje tablicę konfiguracji diagnostycznych, które można utworzyć przy użyciu polecenia cmdlet New-AzureServiceDiagnosticsExtensionConfig .

W poniższym przykładzie pokazano, jak włączyć diagnostykę dla usługi w chmurze z elementami WebRole i WorkerRole, z których każda ma inną konfigurację diagnostyki.

$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)

Jeśli plik konfiguracji diagnostyki określa StorageAccount element o nazwie konta magazynu, New-AzureServiceDiagnosticsExtensionConfig polecenie cmdlet automatycznie użyje tego konta magazynu. Aby to działało, konto magazynu musi znajdować się w tej samej subskrypcji co wdrażana usługa w chmurze.

W zestawie Azure SDK 2.6 pliki konfiguracji rozszerzenia generowane przez docelowe dane wyjściowe publikowania programu MSBuild będą zawierać nazwę konta magazynu na podstawie ciągu konfiguracji diagnostyki określonego w pliku konfiguracji usługi (cscfg). Poniższy skrypt przedstawia sposób analizowania plików konfiguracji rozszerzenia z danych wyjściowych publikowania docelowego i konfigurowania rozszerzenia diagnostycznego dla każdej roli podczas wdrażania usługi w chmurze.

$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

Program Visual Studio Online używa podobnego podejścia do zautomatyzowanych wdrożeń Cloud Services z rozszerzeniem diagnostycznym. Zobacz Publish-AzureCloudDeployment.ps1 , aby zapoznać się z kompletnym przykładem.

Jeśli nie StorageAccount określono w konfiguracji diagnostyki, musisz przekazać parametr StorageAccountName do polecenia cmdlet. Jeśli określono parametr StorageAccountName , polecenie cmdlet zawsze będzie używać konta magazynu określonego w parametrze, a nie tego określonego w pliku konfiguracji diagnostyki.

Jeśli konto magazynu diagnostycznego znajduje się w innej subskrypcji niż usługa w chmurze, musisz jawnie przekazać parametry StorageAccountName i StorageAccountKey do polecenia cmdlet. Parametr StorageAccountKey nie jest wymagany, gdy konto magazynu diagnostycznego znajduje się w tej samej subskrypcji, ponieważ polecenie cmdlet może automatycznie wykonywać zapytania i ustawiać wartość klucza podczas włączania rozszerzenia diagnostycznego. Jeśli jednak konto magazynu diagnostycznego znajduje się w innej subskrypcji, polecenie cmdlet może nie być w stanie automatycznie pobrać klucza i musisz jawnie określić klucz za pomocą parametru 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

Włączanie rozszerzenia diagnostyki w istniejącej usłudze Cloud Service

Możesz użyć polecenia cmdlet Set-AzureServiceDiagnosticsExtension , aby włączyć lub zaktualizować konfigurację diagnostyki w usłudze w chmurze, która jest już uruchomiona.

Ostrzeżenie

Po włączeniu diagnostyki istniejącej roli wszystkie ustawione rozszerzenia są wyłączone po wdrożeniu pakietu. Są one następujące:

  • Diagnostyka programu Microsoft Monitoring Agent
  • Monitorowanie zabezpieczeń platformy Microsoft Azure
  • Usługa firmy Microsoft chroniąca przed złośliwym kodem
  • Microsoft Monitoring Agent
  • Agent profilera usługi firmy Microsoft
  • Rozszerzenie domeny platformy Windows Azure
  • Rozszerzenie Diagnostyka Azure systemu Windows
  • Rozszerzenie pulpitu zdalnego platformy Windows Azure
  • Moduł zbierający dzienniki platformy Windows Azure

Rozszerzenia można zresetować za pomocą Azure Portal lub programu PowerShell po wdrożeniu zaktualizowanej roli.

$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

Pobieranie bieżącej konfiguracji rozszerzenia diagnostyki

Użyj polecenia cmdlet Get-AzureServiceDiagnosticsExtension , aby uzyskać bieżącą konfigurację diagnostyki dla usługi w chmurze.

Get-AzureServiceDiagnosticsExtension -ServiceName "MyService"

Usuwanie rozszerzenia diagnostyki

Aby wyłączyć diagnostykę usługi w chmurze, możesz użyć polecenia cmdlet Remove-AzureServiceDiagnosticsExtension .

Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService"

Jeśli rozszerzenie diagnostyki zostało włączone przy użyciu polecenia Set-AzureServiceDiagnosticsExtension lub New-AzureServiceDiagnosticsExtensionConfig bez parametru Rola , możesz usunąć rozszerzenie przy użyciu polecenia Remove-AzureServiceDiagnosticsExtension bez parametru Rola . Jeśli parametr roli został użyty podczas włączania rozszerzenia, należy go również użyć podczas usuwania rozszerzenia.

Aby usunąć rozszerzenie diagnostyki z pojedynczej roli:

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

Następne kroki