Aracılığıyla paylaş


Azure IoT Edge için yaygın sorunların çözümleri

Şunlar için geçerlidir: evet simgesi IoT Edge 1.1

Önemli

IoT Edge 1.1 destek sonu tarihi 13 Aralık 2022'ydi. Bu ürünün, hizmetin, teknolojinin veya API’nin nasıl desteklendiği hakkında bilgi edinmek için Microsoft Ürün Yaşam Döngüsü’ne göz atın. IoT Edge'in en son sürümüne güncelleştirme hakkında daha fazla bilgi için bkz . IoT Edge'i güncelleştirme.

IoT Edge çözümlerini kullanırken sık karşılaşılan sorunları belirlemek ve çözmek için bu makaleyi kullanın. IoT Edge cihazınızdan günlükleri ve hataları bulma hakkında bilgiye ihtiyacınız varsa bkz . IoT Edge cihazınızda sorun giderme.

Sağlama ve Dağıtım

IoT Edge modülü başarıyla dağıtılıyor ancak ardından cihazdan kayboluyor

Belirtiler

IoT Edge cihazı için modüller ayarlandıktan sonra modüller başarıyla dağıtılır ancak birkaç dakika sonra cihazdan ve Azure portalındaki cihaz ayrıntılarından kaybolur. Tanımlanan modüllerden başka modüller de cihazda görünebilir.

Neden

Bir otomatik dağıtım bir cihazı hedef alıyorsa, tek bir cihaz için modülleri el ile ayarlamaya göre öncelik alır. Azure portalında modülleri ayarla işlevi veya Visual Studio Code'da tek cihaz için dağıtım oluşturma işlevi bir an için geçerli olur. Tanımladığınız modüllerin cihazda başladığını görürsünüz. Ardından otomatik dağıtımın önceliği başlar ve cihazın istenen özelliklerinin üzerine yazılır.

Çözüm

Cihaz başına otomatik dağıtım veya tek tek cihaz dağıtımları olmak üzere yalnızca bir dağıtım mekanizması türü kullanın. Bir cihazı hedefleyen birden çok otomatik dağıtımınız varsa, belirli bir cihaza doğru dağıtımın uygulandığından emin olmak için öncelik veya hedef açıklamalarını değiştirebilirsiniz. Ayrıca cihaz ikizini artık otomatik dağıtımın hedef açıklamasıyla eşleşecek şekilde güncelleştirebilirsiniz.

Daha fazla bilgi için bkz . Tek cihazlar veya uygun ölçekte IoT Edge otomatik dağıtımlarını anlama.

Windows'da IoT Edge çalışma zamanı günlükleri alınamıyor

Belirtiler

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

Neden

Get-WinEvent PowerShell komutu, belirli ProviderNamebir tarafından günlükleri bulmak için mevcut bir kayıt defteri girdisine dayanır.

Çözüm

IoT Edge daemon'ları için bir kayıt defteri girdisi ayarlayın. Aşağıdaki içeriğe sahip bir iotedge.reg dosyası oluşturun ve çift tıklayarak veya komutunu kullanarak Windows Kayıt Defteri'ne aktarın reg import iotedge.reg :

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

DPS istemci hatası

Belirtiler

IoT Edge hata iletisiyle başlatılamıyor failed to provision with IoT Hub, and no valid device backup was found dps client error.

Neden

Grup kaydı, IoT Hub'a IoT Edge cihazı sağlamak için kullanılır. IoT Edge cihazı farklı bir hub'a taşınır. Kayıt DPS'de silinir. Yeni hub için DPS'de yeni bir kayıt oluşturulur. Cihaz yeniden sağlanmamıştır.

Çözüm

  1. DPS kimlik bilgilerinizin doğru olduğunu doğrulayın.
  2. kullanarak sudo iotedge apply configyapılandırmanızı uygulayın.
  3. Cihaz yeniden sağlanmamışsa kullanarak cihazı sudo iotedge system restartyeniden başlatın.
  4. Cihaz yeniden sağlanmamışsa kullanarak yeniden sağlamayı sudo iotedge system reprovisionzorla.

Otomatik olarak yeniden sağlama için cihaz yapılandırma dosyasında ayarlayın dynamic_reprovisioning: true . Bu bayrağın true olarak ayarlanması dinamik yeniden sağlama özelliğini kabul eder. IoT Edge, belirli hatalar için kendi IoT Hub bağlantısını izleyerek cihazın bulutta yeniden sağlanmış gibi göründüğü durumları algılar. IoT Edge, tüm Edge modüllerini ve kendisini kapatarak yanıt verir. Daemon bir sonraki başlatıldığında, yeni IoT Hub sağlama bilgilerini almak için bu cihazı Azure ile yeniden sağlamayı dener.

Dış sağlama kullanılırken, daemon kapatmadan önce dış sağlama uç noktasına yeniden sağlama olayı hakkında da bildirim gönderir. Daha fazla bilgi için bkz . IoT Hub cihazı yeniden sağlama kavramları.

IoT Edge çalışma zamanı

IoT Edge aracısı bir dakika sonra durur

Belirtiler

edgeAgent modülü yaklaşık bir dakika boyunca başarıyla başlatılır ve çalışır, ardından durur. Günlükler, IoT Edge aracısının AMQP üzerinden IoT Hub'a bağlanmayı denediğini ve ardından WebSocket üzerinden AMQP kullanarak bağlanmayı denediğini gösterir. Bu başarısız olduğunda IoT Edge aracısı çı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...

Neden

Konak ağındaki bir ağ yapılandırması, IoT Edge aracısının ağa ulaşmasını engelliyor. 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 atanmış IP adresleri için İnternet'e giden bir yol olduğundan emin olun. Bazen konaktaki VPN yapılandırması, IoT Edge ağını geçersiz kılar.

Edge Aracısı modülü “boş yapılandırma dosyası” bildiriyor ve cihazda hiçbir modül başlatılmıyor

Belirtiler

Cihaz, dağıtımda tanımlanan modülleri başlatırken sorun yaşıyor. Yalnızca edgeAgent çalışıyor ancak sürekli olarak 'boş yapılandırma dosyası...' bildiriyor.

Neden

Varsayılan olarak, IoT Edge modülleri kendi yalıtılmış kapsayıcı ağında başlatır. Cihaz bu özel ağ içinde DNS ad çözümlemesiyle ilgili sorun yaşıyor olabilir.

Çözüm

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

Ortamınız için DNS sunucusunu, altyapı tarafından başlatılan tüm kapsayıcı modülleri için geçerli olacak kapsayıcı altyapısı ayarlarında belirtin. adlı daemon.jsonbir dosya oluşturun ve kullanılacak DNS sunucusunu belirtin. Örneğin:

{
    "dns": ["1.1.1.1"]
}

Bu DNS sunucusu genel olarak erişilebilen bir DNS hizmetine ayarlanır. Ancak şirket ağları gibi bazı ağların kendi DNS sunucuları yüklüdür ve genel DNS sunucularına erişime izin vermez. Bu nedenle, uç cihazınız bir genel DNS sunucusuna erişemiyorsa, bunu erişilebilir bir DNS sunucusu adresiyle değiştirin.

Platformunuz için doğru konuma yerleştirin daemon.json :

Platform Konum
Linux /etc/docker
Windows kapsayıcıları ile Windows konağı C:\ProgramData\iotedge-moby\config

Konum zaten dosya içeriyorsadaemon.json, dns anahtarını ekleyin ve dosyayı kaydedin.

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

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

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

IoT Edge dağıtımında her modülün createOptions için DNS sunucusu ayarlayabilirsiniz. Örneğin:

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

Uyarı

Bu yöntemi kullanır ve yanlış DNS adresi belirtirseniz edgeAgent, IoT Hub ile bağlantıyı kaybeder ve sorunu çözmek için yeni dağıtımlar alamaz. Bu sorunu çözmek için IoT Edge çalışma zamanını yeniden yükleyebilirsiniz. IoT Edge'in yeni bir örneğini yüklemeden önce önceki yüklemeden edgeAgent kapsayıcılarını kaldırdığınızdan emin olun.

EdgeAgent ve edgeHub modülleri için de bu yapılandırmayı ayarladığınızdan emin olun.

IoT Edge aracısı bir modülün görüntüsüne erişemiyor (403)

Belirtiler

Kapsayıcı çalıştırılamıyor ve edgeAgent günlükleri bir 403 hatası bildirecek.

Neden

IoT Edge aracı modülünün bir modülün görüntüsüne erişme izinleri yoktur.

Çözüm

Kapsayıcı kayıt defteri kimlik bilgilerinizin cihaz dağıtım bildiriminizi doğru olduğundan emin olun.

IoT Edge hub’ı başlatılamıyor

Belirtiler

edgeHub modülü başlatılamıyor. Günlüklerde aşağıdaki hatalardan birine benzer bir ileti görebilirsiniz:

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)

Or

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)

Neden

Konak makinedeki başka bir işlem, edgeHub modülünün bağlamaya çalıştığı bir bağlantı noktasına bağlanmıştır. IoT Edge hub'ı ağ geçidi senaryolarında kullanılmak üzere 443, 5671 ve 8883 bağlantı noktalarını eşler. Başka bir işlem bu bağlantı noktalarından birine zaten bağlıysa modül başlatılamaz.

Çözüm

Bu sorunu iki şekilde çözebilirsiniz:

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

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

Azure portalında:

  1. IoT hub'ınıza gidin ve Cihaz yönetimi menüsünün altında Cihazlar'ı seçin.

  2. Güncelleştirmek istediğiniz IoT Edge cihazını seçin.

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

  4. Çalışma Zamanı Ayarları'nı seçin.

  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. IoT Edge cihazınıza uyguladığınız deployment.json dosyasını açın.

  2. edgeHub edgeAgent 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ın sonundaki createOptions satırı ve sonundaki virgülleri image kaldırın:

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

IoT Edge modülü 404 hatasıyla edgeHub’a ileti gönderemiyor

Belirtiler

Özel bir IoT Edge modülü IoT Edge hub'ına 404 Module not found hatasıyla ileti gönderemiyor. IoT Edge çalışma zamanı aşağıdaki iletiyi günlüklere 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 )

Neden

IoT Edge çalışma zamanı, güvenlik nedeniyle edgeHub'a bağlanan tüm modüller için işlem tanımlamayı zorunlu kılır. Bir modül tarafından gönderilen tüm iletilerin modülün ana işlem kimliğinden geldiğini doğrular. İlk oluşturulandan farklı bir işlem kimliğinden bir modül tarafından ileti gönderiliyorsa, 404 hata iletisiyle iletiyi reddeder.

Çözüm

1.0.7 sürümünden itibaren tüm modül işlemlerine bağlanma yetkisi veilmektedir. Daha fazla bilgi için bkz . 1.0.7 sürüm değişiklik günlüğü.

1.0.7 sürümüne yükseltmek mümkün değilse aşağıdaki adımları tamamlayın. EdgeHub'a ileti göndermek için özel IoT Edge modülü tarafından her zaman aynı işlem kimliğinin kullanıldığından emin olun. Örneğin, Docker dosyanızda komutu yerine bunu yaptığınızdan CMD emin olunENTRYPOINT. Komut, CMD modül için bir işlem kimliğine ve ana programı çalıştıran bash komutu için başka bir işlem kimliğine yol açar, ancak ENTRYPOINT tek bir işlem kimliğine yol açar.

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

Belirtiler

Raspberry Pi gibi kaynak kısıtlanmış cihazlarda, özellikle ağ geçidi olarak kullanıldığında kararlılık sorunlarıyla karşılaşabilirsiniz. Belirtiler arasında IoT Edge hub modülündeki yetersiz bellek özel durumları, aşağı akış cihazlarının bağlanamaması veya cihazın birkaç saat sonra telemetri iletileri gönderememesi sayılabilir.

Neden

IoT Edge çalışma zamanının bir parçası olan IoT Edge hub'ı varsayılan olarak performans için iyileştirilmiştir ve büyük bellek öbekleri ayırmaya çalışır. Bu iyileştirme, kısıtlanmış uç 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 false olarak ayarlayın. Ortam değişkenlerini ayarlamanın iki yolu vardır:

Azure portalında:

IoT Hub'ınızda IoT Edge cihazınızı ve cihaz ayrıntıları sayfasında Modül Çalışma>Zamanı Ayarlarını Ayarla'yı seçin. IoT Edge hub modülü için OptimizeForPerformance adlı false olarak ayarlanmış bir ortam değişkeni oluşturun.

OptimizeForPerformance false olarak ayarlandı

Dağıtım bildiriminde:

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

Güvenlik daemon'ı başarıyla başlatamadı

Belirtiler

Güvenlik daemon'ı başlatılamıyor ve modül kapsayıcıları oluşturulmuyor. edgeAgentve edgeHub diğer özel modüller IoT Edge hizmeti tarafından başlatılmaz. Günlüklerde aziot-edged şu hatayı görürsünüz:

  • Daemon başarıyla başlatılamadı: Yönetim hizmeti başlatılamadı
  • neden: /var/run/iotedge/mgmt.sock yolu için bir hata oluştu
  • neden: İzin reddedildi (İs hatası 13)

Neden

CentOS 7 dışındaki tüm Linux dağıtımları için IoT Edge'in varsayılan yapılandırması yuva etkinleştirmeyi kullanmaktır systemd . Yapılandırma dosyasını yuva etkinleştirmeyi kullanmayacak şekilde değiştirir ancak URL'leri olarak /var/run/iotedge/*.sockiotedge bırakırsanız, kullanıcı kilidini açamaz /var/run/iotedge ve yuvaların kendisini bağlayamaz anlamına gelir.

Çözüm

Yuva etkinleştirmenin desteklendiği bir dağıtımda yuva etkinleştirmeyi devre dışı bırakmanız gerekmez. Ancak, yuva etkinleştirmeyi hiç kullanmamak isterseniz, yuvaları içine /var/lib/iotedge/yerleştirin.

  1. Systemd'in gereksiz yere başlatmaması için yuva birimlerini devre dışı bırakmak için komutunu çalıştırın systemctl disable iotedge.socket iotedge.mgmt.socket
  2. iotedge yapılandırmasını hem hem de connect listen bölümlerinde kullanılacak şekilde /var/lib/iotedge/*.sock değiştirin
  3. Modülleriniz zaten varsa, eski /var/run/iotedge/*.sock bağlamalara sahiptirler, bu nedenle docker rm -f bunlar.

İşletim sistemi uyuşmazlığı nedeniyle modül başlatılamadı

Belirti

EdgeHub modülü IoT Edge sürüm 1.1'de başlatılamıyor.

Neden

Windows modülü, konaktaki Windows sürümüyle uyumlu olmayan bir Windows sürümü kullanır. Modül görüntüsü için temel katman olarak IoT Edge Windows sürüm 1809 derleme 17763 gereklidir, ancak farklı bir sürüm kullanılıyor.

Çözüm

Konak ve kapsayıcı görüntüsü uyuşmazlıklarıyla ilgili sorunları giderme bölümünde çeşitli Windows işletim sistemlerinizin sürümünü denetleyin. İşletim sistemleri farklıysa, bunları IoT Edge Windows sürüm 1809 derleme 17763'e güncelleştirin ve bu modül için kullanılan Docker görüntüsünü yeniden oluşturun.

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

Belirtiler

IoT Edge güvenlik yöneticisi günlüklerini denetleme girişimi başarısız oluyor ve aşağıdaki iletiyi yazdırıyor:

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

Neden

IoT Edge çalışma zamanı yalnızca 64 karakterden kısa konak adlarını destekleyebilir. Fiziksel makinelerin genellikle uzun konak adları yoktur, ancak sorun bir sanal makinede daha yaygındır. Özellikle Azure'da barındırılan Windows sanal makineleri için otomatik olarak oluşturulan konak adları uzun olma eğilimindedir.

Çözüm

Bu hatayı gördüğünüzde, sanal makinenizin DNS adını yapılandırıp ardından kurulum komutunda DNS adını ana bilgisayar adı olarak ayarlayarak sorunu çözebilirsiniz.

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

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

    Sanal makinenin DNS adını yapılandırma

  3. DNS adı etiketi için bir değer sağlayın 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 aşağıdaki komutu kullanarak IoT Edge çalışma zamanını DNS adınızla ayarlayın:

    • Linux'ta:

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

      notepad C:\ProgramData\iotedge\config.yaml
      

IoT Edge modülü bağlantı hatası bildiriyor

Belirtiler

Çalışma zamanı modülleri de dahil olmak üzere doğrudan bulut hizmetlerine bağlanan IoT Edge modülleri beklendiği gibi çalışmayı durdurur ve bağlantı veya ağ hataları ile ilgili hatalar döndürür.

Neden

Kapsayıcılar, bulut hizmetleriyle iletişim kurabilmeleri için İnternet'e bağlanmak için IP paketi iletmeyi kullanır. Docker'da IP paketi iletme varsayılan olarak etkindir, ancak devre dışı bırakılırsa bulut hizmetlerine bağlanan 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 paketi iletmeyi etkinleştirmek için aşağıdaki adımları kullanın.

Windows'da:

  1. Uygulamayı çalıştır'ı açın.

  2. Metin kutusuna girin regedit ve Tamam'ı seçin.

  3. Kayıt Defteri Düzenleyicisi penceresinde HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters adresine gidin.

  4. IPEnableRouter parametresini arayın.

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

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

      Ayar Değer
      Veri Akışı 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. Dosyaya aşağıdaki satırı ekleyin.

    net.ipv4.ip_forward=1
    
  3. Dosyayı kaydedip kapatın

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

Sonraki adımlar

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

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