Azure Windows VM uzantısı hatalarını giderme

Azure Resource Manager şablonlarına genel bakış

Azure Resource Manager şablonları, kaynaklar arasındaki bağımlılıkları tanımlayarak Azure IaaS altyapısını JSON dilinde bildirimli olarak belirtmenize olanak tanır.

Uzantıları kullanmaya yönelik yazma şablonları hakkında daha fazla bilgi edinmek için bkz. Uzantı şablonları yazma.

Bu makalede, yaygın VM uzantısı hatalarından bazılarının sorunlarını giderme hakkında bilgi edineceğiz.

Uyarı

Daha hızlı tanılama için VM yardımını deneyin. Windows için VM yardımını veya Linux için VM yardımını çalıştırmanızı öneririz. Bu betik tabanlı tanılama araçları, Azure VM Konuk Aracısı'nı ve genel VM durumunu etkileyen yaygın sorunları belirlemenize yardımcı olur.

Sanal makinelerle ilgili performans sorunları yaşıyorsanız desteğe başvurmadan önce bu araçları çalıştırın.

Uzantı durumunu görüntüleme

Azure Resource Manager şablonları Azure PowerShell'den yürütülebilir. Şablon yürütüldükten sonra uzantı durumu Azure Kaynak Gezgini'nden veya komut satırı araçlarından görüntülenebilir.

İşte bir örnek:

Azure PowerShell:

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

Örnek çıktı şu şekildedir:

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
    }
  ]
}

Uzantı hatalarını giderme

VM Aracısı'nın çalıştığını ve Hazır olduğunu doğrulayın

Uzantıları yönetmek, yüklemek ve yürütmek için VM Aracısı gereklidir. VM Aracısı çalışmıyorsa veya Azure platformuna Hazır durumu bildiremiyorsa uzantı düzgün çalışmıyor demektir.

VM Aracısı sorunlarını gidermek için aşağıdaki sayfalar:

Uzantınızla ilgili sorun giderme kılavuzunuzu denetleyin

Bazı uzantıların sorunlarını gidermeyi açıklayan belirli bir sayfası vardır. Bu uzantıların ve sayfaların listesini Uzantı sorunlarını giderme sayfasında bulabilirsiniz.

Uzantının durumunu görüntüleme

Daha önce açıklandığı gibi, uzantının durumu PowerShell cmdlet'i çalıştırılarak bulunabilir:

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

Veya CLI komutu:x

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

Veya Azure portalında, VM Dikey Penceresine / Ayarlara / Uzantılara göz atarak. Ardından uzantıya tıklayıp durumunu ve iletisini de kontrol edebilirsiniz.

VM'de uzantıyı yeniden çalıştırma

Özel Betik Uzantısı'nı kullanarak VM'de betik çalıştırıyorsanız bazen VM'nin başarıyla oluşturulduğu ancak betiğin başarısız olduğu bir hatayla karşılaşabilirsiniz. Bu koşullar altında, bu hatadan kurtarmanın önerilen yolu uzantıyı kaldırmak ve şablonu yeniden çalıştırmaktır.

Uyarı

Gelecekte bu işlev, uzantıyı kaldırma gereksinimini ortadan kaldıracak şekilde geliştirilecek.

Uzantıyı Azure PowerShell'den kaldırma

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

Uzantı kaldırıldıktan sonra şablon, betikleri VM'de çalıştırmak için yeniden yürütülebilir.

VM'ye yeni bir GoalState tetikleme

'Windows Azure CRP Sertifika Oluşturucu' eksik olduğundan uzantının çalışmadığını görebilirsiniz. Bu sertifika, aktarım sırasında uzantı ayarlarının korunmasına yardımcı olur. Bu sertifika, Sanal Makine içinden Windows Konuk Aracısı yeniden başlatılarak otomatik olarak yeniden oluşturulur:

  • Görev Yöneticisi'ni açma
  • Ayrıntılar sekmesine gidin
  • WindowsAzureGuestAgent.exe işlemini bulma
  • Sağ tıklayın ve "Görevi Sonlandır"ı seçin. İşlem otomatik olarak yeniden başlatılır

Ayrıca bir "VM Yeniden Uygulama" yürüterek vm için yeni bir GoalState tetikleyebilirsiniz. VM Reapply , bir VM'nin durumunu yeniden uygulamak için 2020'de kullanıma sunulan bir API'dir. Bunu, kısa bir VM kapalı kalma süresini tolere edebildiğiniz bir zamanda yapmanızı öneririz. Yeniden uygulama genellikle VM'yi yeniden başlatmaz, ancak nadir durumlarda yeniden başlatma gerektiren bekleyen bir güncelleştirmeyi tetikleyebilir.

Azure portalı:

Portalda VM'yi seçin ve sol bölmede Destek + sorun giderme altında Yeniden dağıt + yeniden uygulama'yı ve ardından Yeniden Uygulama'yı seçin.

Azure PowerShell (RG Adı ve VM Adı değerleriniz ile değiştirin):

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

Azure CLI (RG Adı ve VM Adı değerleriniz ile değiştirin):

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

"VM Yeniden Uygulama" işe yaramadıysa, Azure Yönetim Portalı'ndan VM'ye yeni bir boş Veri Diski ekleyebilir ve sertifika geri eklendikten sonra daha sonra kaldırabilirsiniz.

VM'nin içindeki uzantı günlüklerine bakın

Önceki adımlar işe yaramadıysa ve uzantınız hala başarısız durumdaysa, sonraki adım Sanal Makine içindeki günlüklerine bakmaktır.

Windows VM'sinde uzantı günlükleri varsayılan olarak

C:\WindowsAzure\Logs\Plugins

Ayrıca Uzantı ayarları ve durum dosyaları varsayılan olarak

C:\Packages\Plugins

Linux VM'sinde uzantı günlükleri varsayılan olarak

/var/log/azure/

Ayrıntılara göre Uzantı ayarları ve durum dosyaları

/var/lib/waagent/

Her uzantı farklıdır, ancak genellikle benzer ilkelere uyar:

Uzantı paketleri ve ikili dosyaları VM'ye indirilir (örnek: Linux için "/var/lib/waagent/custom-script/download/1" veya Windows için "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0" ).

Yapılandırmaları ve ayarları Azure Platformu'ndan uzantı işleyicisine VM Aracısı aracılığıyla geçirilir (örnek: Linux için "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/config" veya Windows için "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\RuntimeSettings"

VM içindeki uzantı işleyicileri, Linux için bir durum dosyasına (örnek: "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/status/1.status" veya Azure Platformu'na bildirilen "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Status" ). Bu durum, PowerShell, CLI aracılığıyla veya Azure portalındaki VM'nin uzantı dikey penceresinde bildirilen durumdur.

Ayrıca, CSE Linux sürüm 2.1.16+ için yürütmelerinin ayrıntılı günlüklerini de yazar (örnek: "var/log/azure/Microsoft.Azure.Extensions.CustomScript/handler.log" , Eski CSE Linux sürümleri için "/var/log/azure/custom-script/handler.log" veya Windows için "C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\CustomScriptHandler.log" ).

VM mevcut bir VM'den yeniden oluşturulursa

Başka bir Azure VM'den gelen özel diske dayalı bir Azure VM oluşturuyor olabilir. Bu durumda, eski VM'de uzantılar, ikili dosyalar, günlükler ve durum dosyaları kalmış olabilir. Yeni VM modeli, önceki VM'nin uzantı durumlarının farkında değildir ve bu uzantılar için yanlış bir durum bildirebilir. Yenisini oluşturmadan önce uzantıları eski VM'den kaldırmanızı ve yeni VM oluşturulduktan sonra bu uzantıları yeniden yüklemenizi kesinlikle öneririz. Aynı durum, mevcut bir Azure VM'sinden genelleştirilmiş bir görüntü oluşturduğunuzda da oluşabilir. Uzantılardan tutarsız durumdan kaçınmak için sizi uzantıları kaldırmaya davet ediyoruz.

Bilinen sorunlar

PowerShell iç veya dış komut olarak tanınmıyor

RunCommand uzantısının çıkışında aşağıdaki hata girişlerini fark edeceksiniz:

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

Analiz

Uzantılar Yerel Sistem hesabı altında çalıştırıldığından powershell.exe VM'de RDP yaptığınızda düzgün çalışabilir, ancak RunCommand ile çalıştırıldığında başarısız olabilir.

Solution

  • PowerShell'in PATH ortam değişkeninde düzgün listelendiğinden emin olun:
    • Denetim Masası'nı açma
    • Sistem ve Güvenlik
    • System
    • Gelişmiş sekmesi -> Ortam Değişkenleri
  • 'Sistem değişkenleri' altında Düzenle'ye tıklayın ve PowerShell'in PATH ortam değişkeninde olduğundan emin olun (genellikle: "C:\Windows\System32\WindowsPowerShell\v1.0")
  • VM'yi yeniden başlatın veya WindowsAzureGuestAgent hizmetini yeniden başlatın, ardından Çalıştır Komutunu yeniden deneyin.

Komut iç veya dış komut olarak tanınmıyor

C:\WindowsAzure\Logs\Plugins<ExtensionName><Version>\CommandExecution.log dosyasında aşağıdakileri görürsünüz:

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

Analiz

Uzantılar Yerel Sistem hesabı altında çalıştırıldığından powershell.exe VM'de RDP yaptığınızda düzgün çalışabilir, ancak RunCommand ile çalıştırıldığında başarısız olabilir.

Solution

  • VM'de bir Komut İstemi açın ve hatayı yeniden oluşturmak için bir komut yürütür. VM Aracısı Yönetici cmd.exe kullanır ve cmd her başlatıldığında yürütülecek önceden yapılandırılmış bir komutunuz olabilir.
  • PATH değişkeninizin yanlış yapılandırılmış olması da olasıdır, ancak bu sorun yaşayan komuta bağlıdır.

VMAccessAgent, Yönetici hesabı için Uzak Masaüstü Bağlantısı ayarları güncelleştirilemiyor ile başarısız oluyor. Hata: System.Runtime.InteropServices.COMException (0x800706D9): Uç nokta eşleyicisinden başka uç nokta yok.

Uzantının durumunda aşağıdakileri görürsünüz:

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

Analiz

Windows Güvenlik Duvarı hizmeti çalışmadığında bu hata oluşabilir.

Solution

Windows Güvenlik Duvarı hizmetinin etkinleştirilip etkinleştirilmediğini ve çalışıp çalışmadığını denetleyin. Değilse etkinleştirin ve başlatın; ardından VMAccessAgent'ı çalıştırmayı yeniden deneyin.

Uzak sertifika doğrulama yordamına göre geçersiz.

WaAppAgent.log aşağıdakileri görürsünüz

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.

Analiz

VM'nizde büyük olasılıkla "Güvenilen Kök Sertifika Yetkilileri" içinde Baltimore CyberTrust Kök sertifikası eksiktir.

Solution

certmgr.msc ile sertifikalar konsolunu açın ve sertifikanın orada olup olmadığını denetleyin.

ZScaler gibi bir üçüncü taraf SSL denetleme aracı sertifika zincirini bozabilir. SSL incelemesini atlamak için bu tür araçları yapılandırmanız gerekir.