Azure IoT Edge için yaygın sorunların çözümleri
Şunlar için geçerlidir: 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 ProviderName
bir 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
- DPS kimlik bilgilerinizin doğru olduğunu doğrulayın.
- kullanarak
sudo iotedge apply config
yapılandırmanızı uygulayın. - Cihaz yeniden sağlanmamışsa kullanarak cihazı
sudo iotedge system restart
yeniden başlatın. - Cihaz yeniden sağlanmamışsa kullanarak yeniden sağlamayı
sudo iotedge system reprovision
zorla.
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.json
bir 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:
IoT hub'ınıza gidin ve Cihaz yönetimi menüsünün altında Cihazlar'ı seçin.
Güncelleştirmek istediğiniz IoT Edge cihazını seçin.
Modülleri Ayarlama'yı seçin.
Çalışma Zamanı Ayarları'nı seçin.
Edge Hub modülü ayarlarında, Seçenekler Oluştur metin kutusundan her şeyi silin.
Değişikliklerinizi kaydedin ve dağıtımı oluşturun.
deployment.json dosyasında:
IoT Edge cihazınıza uyguladığınız deployment.json dosyasını açın.
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" }
Satırın sonundaki
createOptions
satırı ve sonundaki virgülleriimage
kaldırın:"edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1" }, "type": "docker", "status": "running", "restartPolicy": "always" }
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.
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. edgeAgent
ve 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/*.sock
iotedge
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.
- 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
- iotedge yapılandırmasını hem hem de
connect
listen
bölümlerinde kullanılacak şekilde/var/lib/iotedge/*.sock
değiştirin - Modülleriniz zaten varsa, eski
/var/run/iotedge/*.sock
bağlamalara sahiptirler, bu nedenledocker 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.
Ağ
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.
Azure portalında sanal makinenizin genel bakış sayfasına gidin.
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.
DNS adı etiketi için bir değer sağlayın ve Kaydet'i seçin.
DNSnamelabel> biçiminde <olması gereken yeni DNS adını kopyalayın.<vmlocation.cloudapp.azure.com>.
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:
Uygulamayı çalıştır'ı açın.
Metin kutusuna girin
regedit
ve Tamam'ı seçin.Kayıt Defteri Düzenleyicisi penceresinde HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters adresine gidin.
IPEnableRouter parametresini arayın.
Parametre varsa, parametresinin değerini 1 olarak ayarlayın.
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
Kayıt defteri düzenleyicisi penceresini kapatın.
Değişiklikleri uygulamak için sisteminizi yeniden başlatın.
Linux'ta:
sysctl.conf dosyasını açın.
sudo nano /etc/sysctl.conf
Dosyaya aşağıdaki satırı ekleyin.
net.ipv4.ip_forward=1
Dosyayı kaydedip kapatın
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.