Delen 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 Authoring extension templates (Extensiesjablonen ontwerpen) voor meer informatie over het ontwerpen van sjablonen voor het gebruik van uitbreidingen.

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 als de status Gereed niet kan worden gerapporteerd aan het Azure-platform, werken de extensies niet correct.

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

Raadpleeg de handleiding voor het oplossen van problemen met uw specifieke extensie

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 is 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 Azure Portal door te bladeren naar de vm-blade/instellingen/extensies. U kunt vervolgens op de extensie klikken en de status en het bericht controleren.

De extensie opnieuw uitvoeren op de virtuele machine

Als u scripts uitvoert op de virtuele machine met behulp van aangepaste scriptextensie, kunt u soms een fout tegenkomen waarbij de VIRTUELE machine is gemaakt, maar het script is mislukt. Onder deze voorwaarden kunt u het beste herstellen van deze fout door de extensie te verwijderen en de sjabloon opnieuw uit te voeren. Opmerking: in de toekomst is deze functionaliteit verbeterd om de noodzaak voor het verwijderen van 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 virtuele machine uit te voeren.

Een nieuwe GoalState activeren naar de VIRTUELE machine

Mogelijk merkt u dat een extensie niet is uitgevoerd of niet kan worden uitgevoerd vanwege een ontbrekende Windows Azure CRP-certificaatgenerator (dat certificaat wordt gebruikt om het transport van de beveiligde instellingen van de extensie te beveiligen). Dit certificaat wordt automatisch opnieuw gegenereerd door de Windows-gastagent opnieuw op 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 naar de VIRTUELE machine 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 VIRTUELE machine opnieuw toe te past. We raden u aan dit te doen op een moment waarop u korte downtime van vm's kunt tolereren. Hoewel Opnieuw toepassen zelf geen vm opnieuw kan worden opgestart en het overgrote deel van de keren dat opnieuw wordt aangeroepen, wordt de VIRTUELE machine niet opnieuw opgestart, maar er is een zeer klein risico dat een andere update in afwachting van een update naar het VM-model wordt toegepast wanneer opnieuw toepassen een nieuwe doelstatus activeert en dat andere wijziging opnieuw kan worden opgestart.

Azure Portal:

Selecteer in de portal de VIRTUELE machine en selecteer in het linkerdeelvenster onder Ondersteuning en probleemoplossing de optie Opnieuw implementeren + opnieuw gebruiken en selecteer Vervolgens Opnieuw van toepassing.

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 azure Management Portal en deze later verwijderen zodra het certificaat weer is toegevoegd.

Bekijk de extensielogboeken in de VIRTUELE machine

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

Op een Windows-VM bevinden de extensielogboeken zich doorgaans in

C:\WindowsAzure\Logs\Plugins

En de extensie-instellingen en statusbestanden bevinden zich in

C:\Packages\Plugins

Op een Virtuele Linux-machine bevinden de extensielogboeken zich doorgaans in

/var/log/azure/

En de extensie-instellingen en statusbestanden bevinden zich in

/var/lib/waagent/

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

Extensiepakketten en binaire bestanden worden gedownload op de VIRTUELE machine (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 van Azure Platform doorgegeven 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)

Extensiehandlers in de VIRTUELE machine 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 wordt gerapporteerd aan het Azure-platform. Deze status is de status die wordt gerapporteerd via PowerShell, CLI of op de extensieblade van de VIRTUELE machine in 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 VIRTUELE machine 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 eerdere VM-extensies en kan een onjuiste status voor deze extensies rapporteren. We raden u ten zeerste aan om de extensies van de oude VIRTUELE machine te verwijderen voordat u de nieuwe vm maakt en deze extensies vervolgens opnieuw te installeren zodra de nieuwe VIRTUELE machine is gemaakt. Hetzelfde kan gebeuren wanneer u een gegeneraliseerde installatiekopieën maakt op basis van een bestaande Virtuele Azure-machine. 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 RunCommand-extensie:

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

Analyse

Extensies worden uitgevoerd onder het lokale systeemaccount, dus het is zeer mogelijk dat powershell.exe prima werkt wanneer u RDP naar de VIRTUELE machine 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 opnieuw op en probeer de opdracht opnieuw uit te voeren.

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 het lokale systeemaccount, dus het is zeer mogelijk dat powershell.exe prima werkt wanneer u RDP naar de VIRTUELE machine uitvoert, maar mislukt wanneer deze wordt uitgevoerd met RunCommand.

Oplossing

  • Open een opdrachtprompt in de virtuele machine en voer een opdracht uit om de fout te reproduceren. De VM-agent maakt gebruik van de cmd.exe Administrator en u hebt mogelijk een vooraf geconfigureerde opdracht om elke keer dat cmd wordt gestart uit te voeren.
  • 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 verbindingsinstellingen voor extern bureaublad niet bijwerken voor het beheerdersaccount. Fout: System.Runtime.InteropServices.COMException (0x800706D9): Er zijn geen eindpunten meer beschikbaar via de eindpunttoewijzingper.

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 dit niet het 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

Uw VIRTUELE machine mist waarschijnlijk het Baltimore CyberTrust-basiscertificaat in 'Vertrouwde basiscertificeringsinstanties'.

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 hulpprogramma voor SSL-inspectie van derden, zoals ZScaler. Dit type hulpprogramma moet worden geconfigureerd om SSL-inspectie te omzeilen.