Azure IoT Edge için genel sorunlar ve çözümler

Aşağıdakiler için geçerlidir:yes icon IoT Edge 1.1 Diğer sürümler:IoT Edge 1.2

Aşağıdakiler için geçerlidir:yes icon IoT Edge 1.2 Diğer sürümler:IoT Edge 1.1

Uygulama çözümleri dağıtırken sık karşılaşılan sorunları çözme adımlarını bulmak için bu IoT Edge kullanın. IoT Edge cihazınızın günlüklerini ve hatalarını bulma hakkında bilgi IoT Edge..

IoT Edge bir dakika sonra aracı durur

Gözlemlenen davranış:

edgeAgent modülü başlar ve yaklaşık bir dakika boyunca başarıyla çalışır ve durur. Günlükler, IoT Edge aracının AMQP üzerinden IoT Hub ve ardından WebSocket üzerinden AMQP kullanarak bağlanmayı denemesi olduğunu gösteriyor. Bu başarısız olduğunda, IoT Edge çıkar.

Örnek edgeAgent günlükleri:

2017-11-28 18:46:19 [INF] - Starting module management agent.
2017-11-28 18:46:19 [INF] - Version - 1.0.7516610 (03c94f85d0833a861a43c669842f0817924911d5)
2017-11-28 18:46:19 [INF] - Edge agent attempting to connect to IoT Hub via AMQP...
2017-11-28 18:46:49 [INF] - Edge agent attempting to connect to IoT Hub via AMQP over WebSocket...

Kök neden:

Konak ağ üzerinde bir ağ yapılandırması, IoT Edge aracının ağa ulaşmasını engelle karşılar. Aracı ilk olarak AMQP (5671 numaralı bağlantı noktası) üzerinden bağlanma girişiminde bulunur. Bağlantı başarısız olursa WebSockets'i (bağlantı noktası 443) dener.

IoT Edge çalışma zamanı, her bir modül için iletişim kurulacak bir ağ ayarlar. Linux’ta bu ağ bir köprü ağıdır. Windows’da NAT kullanır. Bu sorun, NAT ağını kullanan Windows kapsayıcılarının kullanıldığı Windows cihazlarında daha yaygın olarak görülür.

Çözüm:

Bu köprüye/NAT ağına atanan IP adresleri için bir İnternet rotası olduğundan emin olun. Bazen konaktaki VPN yapılandırması, IoT Edge ağını geçersiz kılar.

IoT Edge aracı modülün görüntüsüne erişe değil (403)

Gözlemlenen davranış:

Kapsayıcı çalıştıramaz ve edgeAgent günlükleri 403 hatası gösterir.

Kök neden:

IoT Edge aracı, modülün görüntüsüne erişim iznine sahip değil.

Çözüm:

Kayıt defteri kimlik bilgilerinizin dağıtım bildiriminde doğru şekilde belirtilmiş olduğundan emin olun.

Edge Aracısı modülü 'boş yapılandırma dosyası' raporu verir ve cihazda hiçbir modül başlamaz

Gözlemlenen davranış:

Cihazda dağıtımda tanımlanan modülleri başlatma sorunu var. Yalnızca edgeAgent çalışıyor ama sürekli olarak 'boş yapılandırma dosyası...' bildiriyor.

Kök neden:

Varsayılan olarak, IoT Edge kendi yalıtılmış kapsayıcı ağına modülleri başlatır. Cihaz, bu özel ağ içindeki DNS ad çözümlemesi ile ilgili sorun ediyor olabilir.

Çözüm:

1. Seçenek: Kapsayıcı altyapısı ayarlarında DNS sunucusunu ayarlama

Altyapı tarafından başlatan tüm kapsayıcı modülleri için geçerli olacak kapsayıcı altyapısı ayarlarında ortamınız için DNS sunucusunu belirtin. Kullanmak üzere daemon.json DNS sunucusunu belirten adlı bir dosya oluşturun. Örneğin:

{
    "dns": ["1.1.1.1"]
}

Yukarıdaki örnek, DNS sunucusunu genel olarak erişilebilen bir DNS hizmetine ayarlar. Uç cihaz bu IP'ye ortamından erişenene kadar, bunu erişilebilir DNS sunucusu adresiyle değiştirin.

Platform daemon.json için doğru konuma getirin:

Platform Konum
Linux /etc/docker
Windows kapsayıcılarla Windows barındırma C:\ProgramData\iotedge-moby\config

Konum zaten dosya daemon.json içeriyorsa dns daemon.json ekleyin ve dosyayı kaydedin.

Güncelleştirmelerin etkili olması için kapsayıcı altyapısını yeniden başlatın.

Platform Komut
Linux sudo systemctl restart docker
Windows (Yönetici PowerShell) Restart-Service iotedge-moby -Force

daemon.jsonCihazınızın /etc/docker dizinine yer açın.

Konum zaten bir dosya daemon.json içeriyorsa daemon.json anahtarını ekleyin ve dosyayı kaydedin.

Güncelleştirmelerin etkili olması için kapsayıcı altyapısını yeniden başlatın.

sudo systemctl restart docker

2. Seçenek: Modül başına dağıtım IoT Edge DNS sunucusunu ayarlama

Dağıtım sırasında her modülün createOptions için DNS sunucusu IoT Edge oluşturabilirsiniz. Örneğin:

"createOptions": {
  "HostConfig": {
    "Dns": [
      "x.x.x.x"
    ]
  }
}

EdgeAgent ve edgeHub modülleri için de bu yapılandırmayı ayarlayalın.

IoT Edge hub'ı başlatıla

Gözlemlenen davranış:

edgeHub modülü başlatılamaz. Günlüklerde aşağıdaki hatalardan biri gibi bir ileti alabilirsiniz:

One or more errors occurred.
(Docker API responded with status code=InternalServerError, response=
{\"message\":\"driver failed programming external connectivity on endpoint edgeHub (6a82e5e994bab5187939049684fb64efe07606d2bb8a4cc5655b2a9bad5f8c80):
Error starting userland proxy: Bind for 0.0.0.0:443 failed: port is already allocated\"}\n)

Veya

info: edgelet_docker::runtime -- Starting module edgeHub...
warn: edgelet_utils::logging -- Could not start module edgeHub
warn: edgelet_utils::logging -- 	caused by: failed to create endpoint edgeHub on network nat: hnsCall failed in Win32:  
        The process cannot access the file because it is being used by another process. (0x20)

Kök neden:

Konak makinede bulunan diğer işlemlerde edgeHub modülünün bağlamaya çalıştığı bir bağlantı noktası bağlandı. Ağ IoT Edge ağ geçidi senaryolarında kullanmak üzere 443, 5671 ve 8883 bağlantı noktalarını eşler. Başka bir işlem bu bağlantı noktalarından birini zaten bağlı durumda olduğunda modül başlatamaz.

Çözüm:

Bu sorunu iki şekilde çözebilirsiniz:

IoT Edge ağ geçidi cihazı olarak çalışıyorsa, 443, 5671 veya 8883 bağlantı noktasını kullanan işlemi bulup durdurmanız gerekir. 443 bağlantı noktası hatası genellikle diğer işlem bir web sunucusu olduğu anlamına gelir.

IoT Edge cihazı ağ geçidi olarak kullanmanız gerek yoksa edgeHub'ın modül oluşturma seçeneklerinden bağlantı noktası bağlamalarını kaldırabilirsiniz. Oluşturma seçeneklerini Azure portal doğrudan deployment.json dosyasında değiştirebilirsiniz.

Azure portalında:

  1. IoT hub'ınıza gidin ve IoT Edge.

  2. Güncelleştirmek IoT Edge cihaz seçin.

  3. Modülleri Ayarlama'yı seçin.

  4. Çalışma Zamanı'Ayarlar.

  5. Edge Hub modülü ayarlarında, Seçenekler Oluştur metin kutusundan her şeyi silin.

  6. Değişikliklerinizi kaydedin ve dağıtımı oluşturun.

deployment.json dosyasında:

  1. Uygulama cihazınıza uygulanan deployment.json dosyasını IoT Edge açın.

  2. edgeHubedgeAgent istenen özellikler bölümünde ayarları bulun:

    "edgeHub": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  3. Satırı createOptions ve satırın sonundaki sonda yer alan image virgülün önünden kaldırın:

    "edgeHub": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  4. Dosyayı kaydedin ve yeniden IoT Edge uygulayabilirsiniz.

IoT Edge güvenlik daemon'u geçersiz bir ana bilgisayar adı ile başarısız oluyor

Gözlemlenen davranış:

Güvenlik yöneticisi günlüklerinin IoT Edge denemesi başarısız oluyor ve aşağıdaki iletiyi yazdırır:

Error parsing user input data: invalid hostname. Hostname cannot be empty or greater than 64 characters

Kök neden:

Çalışma IoT Edge yalnızca 64 karakterden kısa konak adlarını destekleyene. Fiziksel makineler genellikle uzun konak adlara sahip değildir, ancak sorun bir sanal makinede daha yaygındır. Özellikle Azure'da barındırılan sanal Windows için otomatik olarak oluşturulan konak adlar uzun olabilir.

Çözüm:

Bu hatayı gördüğünüzde, sanal makinenizin DNS adını yapılandırarak ve ardından dns adını kurulum komutunda ana bilgisayar adı olarak ayarerek bu hatayı çözebilirsiniz.

  1. Sanal Azure portal sanal makinenizin genel bakış sayfasına gidin.

  2. DNS adı altında Yapılandır ' ı seçin. Sanal makinenizin yapılandırılmış bir DNS adı zaten varsa, yeni bir tane yapılandırmanız gerekmez.

    Configure DNS name of virtual machine

  3. DNS ad etiketi için bir değer girin ve Kaydet' i seçin.

  4. Dnsnamelabel biçiminde olması gereken yeni DNS adını kopyalayın > . < vmlocation > . cloudapp.Azure.com.

  5. Sanal makinenin içinde, DNS adınızla IoT Edge çalışma zamanını ayarlamak için aşağıdaki komutu kullanın:

    • Linux 'ta:

      sudo nano /etc/iotedge/config.yaml
      
    • Windows'da:

      notepad C:\ProgramData\iotedge\config.yaml
      
  1. Azure portal, sanal makinenizin genel bakış sayfasına gidin.

  2. DNS adı altında Yapılandır ' ı seçin. Sanal makinenizin yapılandırılmış bir DNS adı zaten varsa, yeni bir tane yapılandırmanız gerekmez.

    Configure DNS name of virtual machine

  3. DNS ad etiketi için bir değer girin ve Kaydet' i seçin.

  4. Dnsnamelabel biçiminde olması gereken yeni DNS adını kopyalayın > . < vmlocation > . cloudapp.Azure.com.

  5. IoT Edge cihazda, yapılandırma dosyasını açın.

    sudo nano /etc/aziot/config.toml
    
  6. Değerini hostname DNS adınızla değiştirin.

  7. Dosyayı kaydedip kapatın ve sonra IoT Edge değişiklikleri uygulayın.

    sudo iotedge config apply
    

Windows IoT Edge Daemon günlükleri alınamıyor

Gözlemlenen davranış:

Windows kullanırken bir EventLogException alırsınız Get-WinEvent .

Kök nedeni:

Get-WinEventPowerShell komutu, belirli bir günlük bulmak için bir kayıt defteri girdisini temel alır ProviderName .

Çözüm:

IoT Edge Daemon için bir kayıt defteri girişi ayarlayın. aşağıdaki içerikle bir ıotedge. reg dosyası oluşturun ve çift tıklayarak veya komutunu kullanarak Windows kayıt defterine aktarın :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\iotedged]
"CustomSource"=dword:00000001
"EventMessageFile"="C:\\ProgramData\\iotedge\\iotedged.exe"
"TypesSupported"=dword:00000007

Daha küçük cihazlarda kararlılık sorunları

Gözlemlenen davranış:

Özellikle bir ağ geçidi olarak kullanıldığında Raspberry PI gibi kaynak kısıtlı cihazlarda kararlılık sorunlarıyla karşılaşabilirsiniz. Belirtiler IoT Edge hub modülündeki bellek dışında özel durumları, bağlantı başarısız olan akış cihazlarını veya cihazın birkaç saatten sonra telemetri iletileri gönderememesi gerektiğini içerir.

Kök nedeni:

IoT Edge çalışma zamanının parçası olan IoT Edge hub, varsayılan olarak performans için en iyi duruma getirilmiştir ve büyük bellek öbeklerini ayırmaya çalışır. Bu iyileştirme kısıtlı sınır cihazları için ideal değildir ve kararlılık sorunlarına neden olabilir.

Çözüm:

IoT Edge hub 'ı için Optimizeforperformance ortam değişkenini falseolarak ayarlayın. Ortam değişkenlerini ayarlamak için iki yol vardır:

Azure portalında:

IoT Hub, IoT Edge cihazınızı ve cihaz ayrıntıları sayfasında, modülçalışma zamanı Ayarlarayarla ' yı seçin. Yanlışolarak ayarlanan Optimizeforperformance adlı IoT Edge hub modülü için bir ortam değişkeni oluşturun.

OptimizeForPerformance set to false

Dağıtım bildiriminde:

"edgeHub": {
  "type": "docker",
  "settings": {
    "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
    "createOptions": <snipped>
  },
  "env": {
    "OptimizeForPerformance": {
      "value": "false"
    }
  },

IoT Edge modülü, 404 hatasıyla edgeHub 'a ileti gönderemediğinde

Gözlemlenen davranış:

Özel bir IoT Edge modülü, bir 404 hatası ile IoT Edge hub 'ına ileti gönderemediğinde Module not found . IoT Edge Daemon, günlüklere aşağıdaki iletiyi yazdırır:

Error: Time:Thu Jun  4 19:44:58 2018 File:/usr/sdk/src/c/provisioning_client/adapters/hsm_client_http_edge.c Func:on_edge_hsm_http_recv Line:364 executing HTTP request fails, status=404, response_buffer={"message":"Module not found"}u, 04 )

Kök nedeni:

IoT Edge Daemon, güvenlik nedenleriyle edgeHub 'a bağlanan tüm modüller için işlem tanımlamayı zorlar. Modül tarafından gönderilen tüm iletilerin, modülün ana işlem KIMLIĞINDEN geldiğini doğrular. Bir ileti, başlangıçta kurulduğu farklı bir işlem KIMLIĞINDEN bir modül tarafından gönderiliyorsa, iletiyi 404 hata iletisiyle reddeder.

Çözüm:

Sürüm 1.0.7 itibariyle, tüm modül işlemlerinin bağlanmasına izin verilir. Daha fazla bilgi için bkz. 1.0.7 Release changelog.

1.0.7 sürümüne yükseltme yapılamıyorsa, aşağıdaki adımları izleyin. Aynı işlem KIMLIĞININ, her zaman özel IoT Edge modülü tarafından edgeHub 'a ileti göndermek için kullanıldığından emin olun. Örneğin, ENTRYPOINTCMD Docker dosyanızda komutunu kullandığınızdan emin olun. CMDKomut, modül için bir Işlem kimliği ve ana programı çalıştıran Bash komutu için başka bir Işlem kimliği sağlar, ancak ENTRYPOINT tek BIR işlem kimliğine yol açar.

IoT Edge modül başarıyla dağıtılır ve sonra cihazdan kaybolur

Gözlemlenen davranış:

Bir IoT Edge cihaz için modüller ayarladıktan sonra, modüller başarıyla dağıtılır, ancak cihazdan ve Azure portal cihaz ayrıntılarından kaybolur. Tanımlandıklardan başka modüller de cihazda görünebilir.

Kök nedeni:

Otomatik dağıtım, bir cihazı hedefliyorsa, tek bir cihaz için modülleri el ile ayarlayarak öncelik kazanır. Visual Studio Code tek bir cihaz işlevselliği için Azure portal veya dağıtım oluşturma içindeki modülleri ayarlama işlevselliği bir süre içinde geçerli olacaktır. Cihazda başlangıç olarak tanımladığınız modülleri görürsünüz. Sonra otomatik dağıtımın öncelikli noktaları, cihazın istenen özelliklerinin üzerine yazar.

Çözüm:

Her cihaz için bir otomatik dağıtım veya tek cihaz dağıtımı olmak üzere yalnızca bir tür dağıtım mekanizması kullanın. Bir cihazı hedefleyen birden fazla otomatik dağıtımınız varsa, belirli bir cihaza doğru bir uygulama olduğundan emin olmak için öncelik veya hedef açıklamalarını değiştirebilirsiniz. Ayrıca, ikizi cihazını otomatik dağıtımın hedef açıklamasıyla artık eşleşmesiz şekilde güncelleştirebilirsiniz.

Daha fazla bilgi için bkz. tek cihazlarda veya ölçekte IoT Edge otomatik dağıtımları anlama.

IoT Edge Module bağlantı hatalarını raporlar

Gözlemlenen davranış:

Çalışma zamanı modülleri de dahil olmak üzere bulut hizmetlerine doğrudan bağlanan modüller IoT Edge, beklendiği gibi çalışmayı durdurun ve bağlantı ya da ağ hatalarında hata döndürür.

Kök nedeni:

Kapsayıcılar, bulut hizmetleriyle iletişim kurabilmesi için internet 'e bağlanmak üzere IP paketi iletmeyi kullanır. IP paketi iletme işlemi Docker 'da varsayılan olarak etkindir, ancak devre dışı alırsa, bulut hizmetlerine bağlanan tüm modüller beklendiği gibi çalışmaz. Daha fazla bilgi için Docker belgelerindeki kapsayıcı Iletişimini anlama bölümüne bakın.

Çözüm:

IP paket iletmeyi etkinleştirmek için aşağıdaki adımları kullanın.

Windows'da:

  1. Çalıştır uygulamasını açın.

  2. regeditMetin kutusuna girin ve regedit' ı seçin.

  3. Kayıt defteri Düzenleyicisi penceresinde, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersgidin.

  4. Ipenablerdıştaki parametresini bulun.

    1. Parametresi varsa, parametresinin değerini 1olarak ayarlayın.

    2. Parametre yoksa, aşağıdaki ayarlarla yeni bir parametre olarak ekleyin:

      Ayar Değer
      Adı Ipenablerouter
      Tür REG_DWORD
      Değer 1
  5. Kayıt Defteri Düzenleyicisi penceresini kapatın.

  6. Değişiklikleri uygulamak için sisteminizi yeniden başlatın.

Linux 'ta:

  1. Sysctl. conf dosyasını açın.

    sudo nano /etc/sysctl.conf
    
  2. Dosyasına aşağıdaki satırı ekleyin.

    net.ipv4.ip_forward=1
    
  3. Dosyayı kaydedin ve kapatın.

  4. Değişiklikleri uygulamak için ağ hizmetini ve Docker hizmetini yeniden başlatın.

Bir ağ geçidinin arkasında IoT Edge HTTP istekleri gerçekleştiremez ve edgeAgent modülünü başlatamıyor

Gözlemlenen davranış:

IoT Edge Daemon geçerli bir yapılandırma dosyası ile etkin, ancak edgeAgent modülünü başlatamıyor. Komut iotedge list boş bir liste döndürür. IoT Edge Daemon günlükleri raporu Could not perform HTTP request .

Kök nedeni:

Bir ağ geçidinin arkasındaki cihazların IoT Edge, yapılandırma dosyasının alanında belirtilen üst IoT Edge cihazdan modül görüntülerini alır parent_hostname . Could not perform HTTP requestHata, alt CIHAZıN http aracılığıyla üst cihazına erişemeyeceği anlamına gelir.

Çözüm:

Üst IoT Edge cihazın alt IoT Edge cihazdan gelen istekleri aldığından emin olun. Alt cihazdan gelen istekler için 443 ve 6617 bağlantı noktalarında ağ trafiğini açın.

Sonraki adımlar

IoT Edge platformunda bir hata bulduğunuzu düşünüyor musunuz? İyileşmeye devam edebilmemiz için bir sorun gönderin .

Daha fazla sorunuz varsa yardım için bir destek isteği oluşturun.