Share via


Problemen met Azure Windows VM-extensies oplossen

Overzicht van Azure Resource Manager-sjablonen

Met behulp van sjablonen van Azure Resource Manager kunt u de IaaS-infrastructuur van Azure declaratief opgeven in de JSON-taal door de afhankelijkheden tussen resources te definiëren.

Zie Extensiesjablonen ontwerpen voor meer informatie over het ontwerpen van sjablonen voor het gebruik van extensies.

In dit artikel besteden we aandacht aan het oplossen van enkele veelvoorkomende problemen met VM-extensies.

Extensiestatus weergeven

Azure Resource Manager-sjablonen kunnen worden uitgevoerd vanuit Azure PowerShell. Zodra de sjabloon is uitgevoerd, kan de extensiestatus worden weergegeven vanuit Azure Resource Explorer of de opdrachtregelprogramma's.

Hier volgt een voorbeeld:

Azure PowerShell:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

Dit is de voorbeelduitvoer:

Extensions:  {
  "ExtensionType": "Microsoft.Compute.CustomScriptExtension",
  "Name": "myCustomScriptExtension",
  "SubStatuses": [
    {
      "Code": "ComponentStatus/StdOut/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "    Directory: C:\\temp\\n\\n\\nMode                LastWriteTime     Length Name
          \\n----                -------------     ------ ----                              \\n-a---          9/1/2015   2:03 AM         11
          test.txt                          \\n\\n",
                  "Time": null
      },
    {
      "Code": "ComponentStatus/StdErr/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "",
      "Time": null
    }
  ]
}

Problemen met extensiefouten oplossen

Controleer of de VM-agent wordt uitgevoerd en gereed is

De VM-agent is vereist voor het beheren, installeren en uitvoeren van extensies. Als de VM-agent niet wordt uitgevoerd of de status Gereed niet kan rapporteren aan het Azure-platform, werken de extensies niet correct.

Raadpleeg de volgende pagina's om problemen met de VM-agent op te lossen:

Controleer op uw specifieke handleiding voor het oplossen van problemen met extensies

Sommige extensies hebben een specifieke pagina waarin wordt beschreven hoe u problemen kunt oplossen. U vindt de lijst met deze extensies en pagina's op Problemen met extensies oplossen .

De status van de extensie weergeven

Zoals hierboven uitgelegd, kunt u de status van de extensie vinden door de PowerShell-cmdlet uit te voeren:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

of de CLI-opdracht:

az vm extension show -g <RG Name> --vm-name <VM Name>  --name <Extension Name>

of in de Azure Portal door naar de VM-blade / Instellingen / Extensies te bladeren. U kunt vervolgens op de extensie klikken en de status en het bericht controleren.

De extensie opnieuw uitvoeren op de VM

Als u scripts uitvoert op de VM met behulp van aangepaste scriptextensie, kan er soms een fout optreden waarbij de VM is gemaakt, maar het script is mislukt. Onder deze omstandigheden kunt u het beste herstellen van deze fout door de extensie te verwijderen en de sjabloon opnieuw uit te voeren. Opmerking: in de toekomst zou deze functionaliteit worden uitgebreid om de extensie te verwijderen.

De extensie verwijderen uit Azure PowerShell

Remove-AzVMExtension -ResourceGroupName $RGName -VMName $vmName -Name "myCustomScriptExtension"

Zodra de extensie is verwijderd, kan de sjabloon opnieuw worden uitgevoerd om de scripts op de VM uit te voeren.

Een nieuwe GoalState activeren voor de VM

U ziet mogelijk dat een extensie niet is uitgevoerd of niet kan worden uitgevoerd vanwege een ontbrekende 'Windows Azure CRP Certificate Generator' (dat certificaat wordt gebruikt om het transport van de beveiligde instellingen van de extensie te beveiligen). Dat certificaat wordt automatisch opnieuw gegenereerd door de Windows-gastagent opnieuw te starten vanuit de virtuele machine:

  • Taakbeheer openen
  • Ga naar het tabblad Details
  • Het WindowsAzureGuestAgent.exe-proces zoeken
  • Klik met de rechtermuisknop en selecteer Taak beëindigen. Het proces wordt automatisch opnieuw gestart

U kunt ook een nieuwe GoalState op de VM activeren door een 'VM Opnieuw toepassen' uit te voeren. VM Opnieuw toepassen is een API die in 2020 is geïntroduceerd om de status van een VM opnieuw toe te voegen. We raden u aan dit te doen op een moment dat u een korte vm-downtime kunt tolereren. Hoewel Opnieuw toepassen zelf niet leidt tot het opnieuw opstarten van de VM en het overgrote deel van de keren dat opnieuw wordt aangeroepen, wordt de VM niet opnieuw opgestart, is er een zeer klein risico dat een andere update die in behandeling is voor het VM-model wordt toegepast wanneer Opnieuw toepassen een nieuwe doelstatus activeert, en dat voor die andere wijziging opnieuw moet worden opgestart.

Azure Portal:

Selecteer in de portal de VM en selecteer in het linkerdeelvenster onder Ondersteuning en probleemoplossingde optie Opnieuw implementeren en opnieuw toepassen en selecteer vervolgens Opnieuw toepassen.

Azure PowerShell (vervang de RG-naam en VM-naam door uw waarden):

Set-AzVM -ResourceGroupName <RG Name> -Name <VM Name> -Reapply

Azure CLI (vervang de RG-naam en VM-naam door uw waarden):

az vm reapply -g <RG Name> -n <VM Name>

Als een 'VM opnieuw toepassen' niet werkt, kunt u een nieuwe lege gegevensschijf toevoegen aan de virtuele machine vanuit de Azure-beheerportal en deze later verwijderen zodra het certificaat weer is toegevoegd.

Bekijk de extensielogboeken in de VM

Als de vorige stappen niet werken en als uw extensie nog steeds een mislukte status heeft, is de volgende stap het bekijken van de logboeken in de virtuele machine.

Op een Windows-VM bevinden de extensielogboeken zich meestal in

C:\WindowsAzure\Logs\Plugins

En de extensie-instellingen en statusbestanden worden weergegeven in

C:\Packages\Plugins

Op een Linux-VM bevinden de extensielogboeken zich doorgaans in

/var/log/azure/

En de extensie-instellingen en statusbestanden worden weergegeven in

/var/lib/waagent/

Elke extensie is anders, maar ze volgen meestal vergelijkbare principes:

Uitbreidingspakketten en binaire bestanden worden gedownload op de VM (bijvoorbeeld "/var/lib/waagent/custom-script/download/1" voor Linux of "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0" voor Windows).

Hun configuratie en instellingen worden doorgegeven van Het Azure-platform aan de extensie-handler via de VM-agent (bijvoorbeeld "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/config" voor Linux of "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\RuntimeSettings" voor Windows)

Extensie-handlers in de VM schrijven naar een statusbestand (bijvoorbeeld "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/status/1.status" voor Linux of "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Status" voor Windows) die vervolgens worden gerapporteerd aan het Azure-platform. Deze status is de status die wordt gerapporteerd via PowerShell, CLI of in de extensieblade van de VM in de Azure Portal.

Ze schrijven ook gedetailleerde logboeken van hun uitvoering (bijvoorbeeld "/var/log/azure/custom-script/handler.log" voor Linux of "C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\CustomScriptHandler.log" voor Windows).

Als de VM opnieuw wordt gemaakt vanaf een bestaande VM

Het kan gebeuren dat u een Azure-VM maakt op basis van een gespecialiseerde schijf die afkomstig is van een andere Azure-VM. In dat geval is het mogelijk dat de oude VM extensies bevat en dus binaire bestanden, logboeken en statusbestanden overblijven. Het nieuwe VM-model is niet op de hoogte van de statussen van de vorige VM-extensies en er wordt mogelijk een onjuiste status voor deze extensies gerapporteerd. We raden u ten zeerste aan om de extensies van de oude VM te verwijderen voordat u de nieuwe vm maakt en deze extensies opnieuw te installeren zodra de nieuwe VM is gemaakt. Hetzelfde kan gebeuren wanneer u een gegeneraliseerde installatiekopieën maakt op basis van een bestaande Azure-VM. We nodigen u uit om extensies te verwijderen om inconsistente status van de extensies te voorkomen.

Bekende problemen

PowerShell wordt niet herkend als een interne of externe opdracht

U ziet de volgende foutvermeldingen in de uitvoer van de extensie RunCommand:

RunCommandExtension failed with "'powershell' isn't recognized as an internal or external command,"

Analyse

Extensies worden uitgevoerd onder lokaal systeemaccount, dus het is heel goed mogelijk dat powershell.exe goed werkt wanneer u RDP op de VM uitvoert, maar mislukt wanneer deze wordt uitgevoerd met RunCommand.

Oplossing

  • Controleer of PowerShell correct wordt vermeld in de omgevingsvariabele PATH:
    • Open Configuratiescherm
    • Systeem en beveiliging
    • Systeem
    • Tabblad Geavanceerd -> Omgevingsvariabelen
  • Klik onder Systeemvariabelen op Bewerken en zorg ervoor dat PowerShell zich in de omgevingsvariabele PATH bevindt (meestal: "C:\Windows\System32\WindowsPowerShell\v1.0")
  • Start de VM opnieuw op of start de WindowsAzureGuestAgent-service en probeer vervolgens de opdracht Uitvoeren opnieuw.

De opdracht wordt niet herkend als een interne of externe opdracht

U ziet het volgende in het bestand C:\WindowsAzure\Logs\Plugins<ExtensionName><Version>\CommandExecution.log:

Execution Error: '<command>' isn't recognized as an internal or external command, operable program or batch file.

Analyse

Extensies worden uitgevoerd onder lokaal systeemaccount, dus het is heel goed mogelijk dat powershell.exe goed werkt wanneer u RDP op de VM uitvoert, maar mislukt wanneer deze wordt uitgevoerd met RunCommand.

Oplossing

  • Open een opdrachtprompt in de VM en voer een opdracht uit om de fout te reproduceren. De VM-agent maakt gebruik van de administrator-cmd.exe en mogelijk hebt u een vooraf geconfigureerde opdracht die moet worden uitgevoerd telkens wanneer cmd wordt gestart.
  • Het is ook waarschijnlijk dat uw PATH-variabele onjuist is geconfigureerd, maar dit is afhankelijk van de opdracht die het probleem ondervindt.

VMAccessAgent mislukt met Kan de instellingen voor Verbinding met extern bureaublad niet bijwerken voor beheerdersaccount. Fout: System.Runtime.InteropServices.COMException (0x800706D9): Er zijn geen eindpunten meer beschikbaar van de eindpunttoewijzing.

U ziet het volgende in de status van de extensie:

Type Microsoft.Compute.VMAccessAgent
Version 2.4.8
Status Provisioning failed
Status level Error
Status message Cannot update Remote Desktop Connection settings for Administrator account. Error: System.Runtime.InteropServices.COMException (0x800706D9): There are no more endpoints available from the endpoint mapper. (Exception from HRESULT: 0x800706D9) at NetFwTypeLib.INetFwRules.GetEnumerator() at 
Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktopFirewallRules() 
at Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktop() at

Analyse

Deze fout kan optreden wanneer de Windows Firewall-service niet wordt uitgevoerd.

Oplossing

Controleer of de Windows Firewall-service is ingeschakeld en wordt uitgevoerd. Als dat niet zo is, schakelt u deze in en start u deze. Probeer het vervolgens opnieuw om de VMAccessAgent uit te voeren.

Het externe certificaat is ongeldig volgens de validatieprocedure.

U ziet het volgende in de WaAppAgent.log

System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.
Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

Analyse

Het Baltimore CyberTrust-basiscertificaat in 'Vertrouwde basiscertificeringsinstanties' ontbreekt waarschijnlijk op uw VM.

Oplossing

Open de certificatenconsole met certmgr.msc en controleer of het certificaat aanwezig is.

Een ander mogelijk probleem is dat de certificaatketen wordt verbroken door een SSL-inspectieprogramma van derden, zoals ZScaler. Dit soort hulpprogramma moet worden geconfigureerd om SSL-inspectie te omzeilen.