Coleta alternativa de logs do appliance para operações desconectadas com VMs do Azure Local habilitadas pelo Azure Arc

Este artigo explica como usar o log de fallback do dispositivo para exportar e enviar logs para a Microsoft quando as VMs locais do Azure operam no modo desconectado. Esse processo ajuda você a solucionar problemas quando a coleção de logs padrão não está disponível.

Sobre o registro em log de fallback

Use a coleta de logs de fallback do appliance para coletar e enviar logs à Microsoft quando a máquina virtual (VM) do appliance de operações desconectadas do Azure Local estiver indisponível. Use esse método se a coleção de logs padrão não puder ser iniciada e você precisar de logs para solucionar problemas.

O diagrama a seguir apresenta uma visão geral do processo de coleta alternativa de logs do appliance:

Diagrama mostrando uma visão geral de alto nível do processo de coleta de logs de fallback do dispositivo.

Pré-requisitos

Para utilizar os cmdlets descritos neste artigo, importe o módulo de logs do appliance.

Importar registro em log do dispositivo

Para importar o log do dispositivo, execute o seguinte comando:

Import-Module "<disconnected operations module folder path>" -Force

Observação

Antes de copiar os arquivos do módulo para o computador de destino, execute o Unblock-File cmdlet nos arquivos usando Windows PowerShell.

O ISE do PowerShell e o PowerShell 7 não têm suporte para comandos de coleta de logs.

Exportar logs por meio de Copy-DiagnosticData

Para exportar os logs em um cenário de fallback, utilize o cmdlet Copy-DiagnosticData.

comando Copy-DiagnosticData

O comando Copy-DiagnosticData é usado para copiar logs de diagnóstico de VHDs (discos rígidos virtuais) montados para uma pasta especificada. Esse comando faz parte do módulo de operações e ajuda você a coletar dados de diagnóstico de um volume de log em VHD para análise.

O cenário de coleta de logs de fallback é utilizado quando a VM do Azure Local não consegue executar operações desconectadas ou quando um ponto de extremidade de gerenciamento apresenta falha. Este cmdlet encerra a VM. Para obter os logs, monte e desbloqueie os VHDs e copie os logs dos VHDs montados para uma pasta local LogsToExport dentro da pasta especificada com DiagnosticLogPath. Você pode definir o intervalo de tempo e as funções para coletar. Se você definir Observability Stamp ID, o cmdlet o incluirá nos valores retornados.

Certifique-se de que esse local tenha espaço suficiente para os logs, pois a VM local do Azure, ao executar VHDs desconectadas, realiza montagens temporárias lá durante a ação de cópia.

Use esses parâmetros com o Copy-DiagnosticData cmdlet.

  • DiagnosticLogPath: Obrigatório. O caminho de destino contém logs copiados e VHDs temporariamente montados.

  • FilterRoles: as funções necessárias para coleta de logs ou diagnóstico podem variar dependendo do cenário. Use o Get-Help cmdlet ou trabalhe com seu contato de suporte para determinar as funções apropriadas a serem incluídas.

  • FromDate e ToDate: Opcional. Horários de início e término dos logs incluídos na coleção. Os logs antes do FromDate e depois do ToDate são excluídos. Por padrão, os logs das últimas quatro horas da hora atual serão coletados se você não fornecer esses parâmetros.

  • RecoveryKeySet (BitLocker): opcional. O RecoveryKeySet tem pares ProtectorId e RecoveryPassword relevantes para volumes criptografados do BitLocker usados para recuperação de coleção de logs. Se as chaves de recuperação não forem fornecidas, a entrada manual das chaves será necessária durante o processo de montagem.

    Observação

    O conjunto de chaves de recuperação do BitLocker é necessário para desbloquear os VHDs montados utilizados na coleta de logs. Obtenha e salve essas chaves depois de implantar o aplicativo usando o endpoint BitlockerRecoveryKeys.

    Exemplo:

    # Replace with your actual values
    
    $certPasswordPlainText = "***"
    $certPassword = ConvertTo-SecureString $certPasswordPlainText -AsPlainText -Force
    $context = Set-DisconnectedOperationsClientContext -ManagementEndpointClientCertificatePath "<Management Endpoint Client Cert Path>" -ManagementEndpointClientCertificatePassword $certPassword -ManagementEndpointIpAddress "<Management Endpoint IP address>"
    
    $recoveryKeys = Get-ApplianceBitlockerRecoveryKeys $context # context can be omitted if context is set.
    $recoveryKeys
    

    Exemplo de saída:

    PS G:\azurelocal> $recoveryKeys = Get-ApplianceBitlockerRecoveryKeys $context # context can be omitted if context is set.
    >>
    >> $recoverykeys.recoveryKeySet | ConvertTo-JSON > c:\recoveryKeySet.json
    >>
    >> Get-content c:\recoveryKeySet.json
    >>
    VERBOSE: [2025-08-05 23:10:58Z][Get-ApplianceBitlockerRecoveryKeys] [START] Get bitlocker recovery keys.
    VERBOSE: [2025-08-05 23:10:58Z][Invoke-ScriptsWithRetry][Get-ApplianceBitlockerRecoveryKeys] Executing 'Script Block' with timeout 300 seconds ...
    VERBOSE: [2025-08-05 23:10:58Z][Invoke-ScriptsWithRetry][Get-ApplianceBitlockerRecoveryKeys] [CHECK][Attempt 0] for task 'Script Block' ...
    VERBOSE: [2025-08-05 23:10:58Z][Invoke-ScriptsWithRetry][Get-ApplianceBitlockerRecoveryKeys] Task 'Script Block' succeeded.
    VERBOSE: [2025-08-05 23:10:58Z][Get-ApplianceBitlockerRecoveryKeys] [END] Get bitlocker recovery keys.
    [
        {
            "protectorid":  "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
            "recoverypassword":  "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
        },
        {
            "protectorid":  "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
            "recoverypassword":  "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
        },
        {
            "protectorid":  "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
            "recoverypassword":  "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
        },
        {
            "protectorid":  "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
            "recoverypassword":  "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
        },
        {
            "protectorid":  "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
            "recoverypassword":  "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
        },
        {
            "protectorid":  "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
            "recoverypassword":  "xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
        }
    ]
    

    Para criar manualmente um parâmetro RecoveryKeySet, use este modelo:

    # Replace with your actual values
    
    $recoveryKeySet = @(
    [PSCustomObject]@{protectorid = "{<Protector Id>}"; recoverypassword = "<Recovery password>"})
    

Copiar da VM do appliance de operações desconectadas do Azure Local

Aqui estão alguns exemplos de como usar o cmdlet Copy-DiagnosticData para obter logs da aplicação de operações desconectadas local da VM do Azure.

Copiar logs de dados de diagnóstico para funções específicas

Para copiar logs de dados de diagnóstico para funções específicas, execute estes comandos:

# Replace with your actual values

Import-Module "<disconnected operations module folder path>" -Force
Copy-DiagnosticData -DiagnosticLogPath "C:/path/to/copied_logs_parent_directory" -FilterRoles @("Agents", "Oplets", "ServiceFabric")

Copiar logs de dados de diagnóstico para funções e intervalos de tempo específicos

Para copiar logs de dados de diagnóstico de funções específicas, incluindo intervalos de tempo e chaves de recuperação, quando fornecidas, execute estes comandos:

# Replace with your actual values

Import-Module "<disconnected operations module folder path>" -Force
$diagnosticLogPath = "C:\path\to\LogsToExport"
$roles = @("Agents", "Oplets", "ServiceFabric")
$fromDate = [datetime]"03/13/2024 12:00:00"
$toDate = [datetime]"03/13/2024 15:00:00"
$recoveryKeySet = @()
Copy-DiagnosticData -DiagnosticLogPath $diagnosticLogPath -FilterRoles $roles -FromDate $fromDate -ToDate $toDate -RecoveryKeySet $recoveryKeySet

Exemplo de saída:

PS C:\Users\administrator.s46r2004\Documents> Copy-DiagnosticData -DiagnosticLogPath $diagnosticLogPath -RecoveryKeySet $recoveryKeySet  
VERBOSE: [2025-03-26 22:10:58Z] [Get-ValidCollectionWindow] $ToDate not provided, set to: 03/26/2025 22:10:58 (current time)  
VERBOSE: [2025-03-26 22:10:58Z] [Get-ValidCollectionWindow] #FromDate not provided, set to: 03/26/2025 18:10:58 (4hr collection window)  
VERBOSE: [2025-03-26 22:10:58Z] [Copy-DiagnosticData] Collecting logs for range: '03/26/2025 18:10:58' - '03/26/2025 22:10:58'  
VERBOSE: [2025-03-26 22:10:58Z] [Copy-DiagnosticData] Collecting logs for FilterRoles: 'Agents', 'Oplets', 'MASLogs', 'ServiceFabric', 'ArcADiagnostics', 'Observability', 'WindowsEventLogs'  
VERBOSE: [2025-03-26 22:10:59Z] [Invoke-StopIRVMAndMountVHDs] Stopping the IRVM...  
VERBOSE: [2025-03-26 22:11:55Z] [Invoke-StopIRVMAndMountVHDs] Attempting to mount VHD 'C:\ClusterStorage\UserStorage_1\InfraVms\IRVM01\Virtual Hard Disks\OSAndDocker_A.vhdx'...      

Exemplo da saída do Copy-DiagnosticData:

| DiagnosticLogPath                                       | StampId                                  |
| --------------------------------------------------------| -----------------------------------------|
| C:\CopyLogs_20240501T1525097418\LogsToExport            | <Stamp ID>                               |

Observação

A VM do dispositivo de operações desconectadas do Azure Local é reiniciada após a conclusão desta operação.

Copiar logs de dados de diagnóstico para um caminho de diretório específico

Para copiar logs de dados de diagnóstico para um caminho de diretório específico, execute estes comandos:

# Replace with your actual values

Import-Module "<disconnected operations module folder path>" -Force
Copy-DiagnosticData -DiagnosticLogPath "C:/path/to/copied_logs_parent_directory"

Esse recurso só está disponível no Azure Local 2602 ou posterior.