Azure IoT Edge için yaygın sorunların çözümleri
Dikkat
Bu makale, Kullanım Süresi Sonu (EOL) durumu olan bir Linux dağıtımı olan CentOS'a başvurur. Lütfen kullanımınızı ve buna uygun planlamayı göz önünde bulundurun. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.
Şunlar için geçerlidir: IoT Edge 1.5 IoT Edge 1.4
Önemli
IoT Edge 1.5 LTS ve IoT Edge 1.4 LTS desteklenen sürümlerdir. IoT Edge 1.4 LTS, 12 Kasım 2024'te kullanım ömrü sona erer. Önceki bir sürümdeyseniz 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.
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 boş yapılandırma dosyası bildiriyor....
Bir cihazda çalıştırdığınızda
sudo iotedge check
, Kapsayıcı altyapısının DNS sunucusu ayarıyla yapılandırılmadığını bildirir ve bu da IoT Hub bağlantısını etkileyebilir. En iyi yöntemler için lütfen bakın https://aka.ms/iotedge-prod-checklist-dns .
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.
- IoT Edge'in anlık yüklemesini kullanıyorsanız Docker yapılandırma dosyası farklı bir konumdur. Bkz. çözüm seçeneği 3.
Çözüm
1. Seçenek: Kapsayıcı altyapısı ayarlarında DNS sunucusunu ayarlama
Altyapı tarafından başlatılan tüm kapsayıcı modülleri için geçerli olan kapsayıcı altyapısı ayarlarında ortamınız için DNS sunucusunu 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.
Cihazınızda dizinine /etc/docker
yerleştirindaemon.json
.
Konum zaten bir daemon.json
dosya içeriyorsa, dns 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
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.
Seçenek 3: Komutu denetlemek için docker yapılandırma dosyasının konumunu geçirin
IoT Edge tutturma olarak yüklendiyse Docker yapılandırma dosyasının konumunu belirtmek için parametresini kullanın --container-engine-config-file
. Örneğin, Docker yapılandırma dosyası konumunda /var/snap/docker/current/config/daemon.json
bulunuyorsa şu komutu çalıştırın: iotedge check --container-engine-config-file '/var/snap/docker/current/config/daemon.json'
.
Şu anda, yapılandırma dosyası konumunu ayarladıktan sonra bile iotedge denetiminin çıkışında uyarı iletisi görünmeye devam eder. IoT Edge tutturma işleminin Docker tutturma işlemine okuma erişimi olmadığından hatayı raporlar. Sürüm işleminizde iotedge denetimi kullanıyorsanız parametresini kullanarak --ignore container-engine-dns container-engine-logrotate
uyarı iletisini gizleyebilirsiniz.
LTE bağlantılı Edge Aracısı modülü 'boş kenar aracısı yapılandırması' bildirir ve 'geçici ağ hatasına' neden olur
Belirtiler
LTE bağlantısıyla yapılandırılan bir cihaz, dağıtımda tanımlanan modülleri başlatırken sorunlarla karşılaşıyor. edgeAgent, IoT Hub'a bağlanamıyor ve boş kenar aracısı yapılandırması ve geçici ağ hatası oluştuğu bildiriyor.
Neden
Bazı ağlarda, varsayılan docker ağı MTU'sunun (1500) çok yüksek olmasını ve paket parçalanmasının dış kaynaklara erişimi engellemesine neden olan paket yükü vardır.
Çözüm
Docker ağınız için MTU ayarını denetleyin.
docker network inspect <network name>
Cihazınızdaki fiziksel ağ bağdaştırıcısı için MTU ayarını denetleyin.
ip addr show eth0
Not
Docker ağı için MTU, cihazınız için MTU'dan yüksek olamaz. Daha fazla bilgi için ISS'nize başvurun.
Docker ağınız ve cihazınız için farklı bir MTU boyutu görürseniz aşağıdaki geçici çözümü deneyin:
Yeni bir ağ oluşturun. Örneğin,
docker network create --opt com.docker.network.driver.mtu=1430 test-mtu
Örnekte, cihazın MTU ayarı 1430'dur. Bu nedenle, Docker ağı için MTU 1430 olarak ayarlanır.
Azure ağını durdurun ve kaldırın.
docker network rm azure-iot-edge
Azure ağını yeniden oluşturun.
docker network create --opt com.docker.network.driver.mtu=1430 azure-iot-edge
Tüm kapsayıcıları kaldırın ve aziot edged hizmetini yeniden başlatın.
sudo iotedge system stop && sudo docker rm -f $(docker ps -aq -f "label=net.azure-devices.edge.owner=Microsoft.Azure.Devices.Edge.Agent") && sudo iotedge config apply
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 aracısı aşırı kimlik çağrıları yapıyor
Belirtiler
IoT Edge aracısı, Azure IoT Hub'a aşırı kimlik çağrıları yapar.
Neden
Cihaz dağıtım bildiriminin yanlış yapılandırılması, cihazda başarısız bir dağıtıma neden olur. IoT Edge Aracısı yeniden deneme mantığı dağıtımı yeniden denemeye devam eder. Her yeniden deneme, dağıtım başarılı olana kadar kimlik çağrıları yapar. Örneğin, dağıtım bildirimi kapsayıcı kayıt defterinde olmayan veya yanlış yazılmış bir modül URI'si belirtirse, Dağıtım bildirimi düzeltilene kadar IoT Edge aracısı dağıtımı yeniden dener.
Çözüm
Azure portalında dağıtım bildirimini doğrulayın. Hataları düzeltin ve bildirimi cihaza yeniden dağıtın.
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 Kapsayıcı Oluşturma Seçenekleri metin kutusundan her şeyi silin.
Değişikliklerinizi kaydetmek ve dağıtımı oluşturmak için Uygula'yı seçin.
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": { "restartPolicy": "always", "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}" }, "status": "running", "type": "docker" }
Satırın sonundaki
createOptions
satırı ve sonundaki virgülleriimage
kaldırın:"edgeHub": { "restartPolicy": "always", "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5", "status": "running", "type": "docker" }
IoT Edge cihazınıza yeniden uygulamak için Oluştur'u seçin.
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, True/False türü False olarak ayarlanmış OptimizeForPerformance adlı bir ortam değişkeni oluşturun.
Değişiklikleri kaydetmek için Uygula'yı ve ardından Gözden Geçir ve oluştur'u seçin.
Ortam değişkeni artık dağıtım bildiriminin özelliğindedir
edgeHub
:"edgeHub": { "env": { "OptimizeForPerformance": { "value": false } }, "restartPolicy": "always", "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}" }, "status": "running", "type": "docker" }
Değişikliklerinizi kaydetmek ve modülü dağıtmak için Oluştur'u seçin.
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.
İleti kuyruğu temizleme işlemi yavaş
Belirtiler
İletiler işlendikten sonra ileti kuyruğu temizlenmiyor. İleti kuyruğu zaman içinde büyür ve sonunda IoT Edge çalışma zamanının belleğinin dolmasına neden olur.
Neden
İleti temizleme aralığı, istemci iletisi TTL (yaşam süresi) ve EdgeHub MessageCleanupIntervalSecs ortam değişkeni tarafından denetlenir . Varsayılan ileti TTL değeri iki saattir ve varsayılan MessageCleanupIntervalSecs değeri 30 dakikadır. Uygulamanız varsayılan değerden daha kısa bir TTL değeri kullanıyorsa ve MessageCleanupIntervalSecs değerini ayarlamazsanız, süresi dolan iletiler bir sonraki temizleme aralığına kadar temizlenmez.
Çözüm
Uygulamanızın varsayılan değerden daha kısa olan TTL değerini değiştirirseniz MessageCleanupIntervalSecs değerini de ayarlayın. MessageCleanupIntervalSecs değeri, istemcinin kullandığı en küçük TTL değerinden önemli ölçüde küçük olmalıdır. Örneğin, istemci uygulaması ileti üst bilgisinde beş dakikalık bir TTL tanımlıyorsa MessageCleanupIntervalSecs değerini bir dakika olarak ayarlayın. Bu ayarlar, iletilerin altı (5 + 1) dakika içinde temizlenmesini sağlar.
MessageCleanupIntervalSecs değerini yapılandırmak için IoT Edge hub modülü için dağıtım bildiriminde ortam değişkenini ayarlayın. Çalışma zamanı ortam değişkenlerini ayarlama hakkında daha fazla bilgi için bkz . Edge Aracısı ve Edge Hub Ortam Değişkenleri.
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.
Yapılandırma panelini açmak için Yapılandırılmadı bağlantısını (sanal makineniz yeniyse) seçin veya Temel DNS>adı'nın altında mevcut DNS adınızı seçin. Sanal makinenizde zaten yapılandırılmış bir DNS adı varsa, yeni bir ad yapılandırmanız gerekmez.
Henüz bir dns ad etiketiniz yoksa bir değer girin ve Kaydet'i seçin.
Şu biçimde olması gereken yeni DNS adını kopyalayın:
<DNSnamelabel>.<vmlocation.cloudapp.azure.com>.IoT Edge cihazında yapılandırma dosyasını açın.
sudo nano /etc/aziot/config.toml
değerini
hostname
DNS adınız ile değiştirin.Dosyayı kaydedip kapatın, ardından değişiklikleri IoT Edge'e uygulayın.
sudo iotedge config apply
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.
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.
Ağ geçidinin arkasındaki IoT Edge, HTTP isteklerini gerçekleştiremiyor ve edgeAgent modülünü başlatamıyor
Belirtiler
IoT Edge çalışma zamanı geçerli bir yapılandırma dosyasıyla etkindir, ancak edgeAgent modülünü başlatamaz. Komut iotedge list
boş bir liste döndürür. IoT Edge çalışma zamanı günlüklerde raporlar Could not perform HTTP request
.
Neden
Bir ağ geçidinin arkasındaki IoT Edge cihazları, modül görüntülerini yapılandırma dosyasının alanında belirtilen parent_hostname
üst IoT Edge cihazından alır. Hata, Could not perform HTTP request
aşağı akış cihazının HTTP üzerinden üst cihazına ulaşamadığı anlamına gelir.
Çözüm
Üst IoT Edge cihazının aşağı akış IoT Edge cihazından gelen istekleri alabildiğinden emin olun. Aşağı akış cihazından gelen istekler için 443 ve 6617 bağlantı noktalarında ağ trafiğini açın.
Ağ geçidinin arkasındaki IoT Edge, HTTP isteklerini gerçekleştiremiyor ve edgeAgent modülünü başlatamıyor
Belirtiler
IoT Edge daemon geçerli bir yapılandırma dosyasıyla etkindir, ancak edgeAgent modülünü başlatamaz. Komut iotedge list
boş bir liste döndürür. IoT Edge daemon günlükleri raporu Could not perform HTTP request
.
Neden
Bir ağ geçidinin arkasındaki IoT Edge cihazları, modül görüntülerini yapılandırma dosyasının alanında belirtilen parent_hostname
üst IoT Edge cihazından alır. Hata, Could not perform HTTP request
aşağı akış cihazının HTTP üzerinden üst cihazına ulaşamadığı anlamına gelir.
Çözüm
Üst IoT Edge cihazının aşağı akış IoT Edge cihazından gelen istekleri alabildiğinden emin olun. Aşağı akış cihazından gelen istekler için 443 ve 6617 bağlantı noktalarında ağ trafiğini açın.
Bir ağ geçidinin arkasındaki IoT Edge, bir IoT hub'ından diğerine geçirildiğinde bağlanamıyor
Belirtiler
IoT Edge cihaz hiyerarşisini bir IoT hub'ından diğerine geçirmeye çalışırken, üst düzey üst IoT Edge cihazı IoT Hub'a bağlanabilir, ancak aşağı akış IoT Edge cihazları bağlanamaz. Günlükler raporu Unable to authenticate client downstream-device/$edgeAgent with module credentials
.
Neden
Yeni IoT hub'ına geçiş gerçekleştiğinde aşağı akış cihazlarının kimlik bilgileri düzgün güncelleştirilmedi. Bu edgeAgent
nedenle ve edgeHub
modüller kimlik doğrulama türüne none
sahip olacak şekilde ayarlanmıştır (açıkça ayarlanmadıysa varsayılan). Bağlantı sırasında, aşağı akış cihazlarında modüller eski kimlik bilgilerini kullanır ve kimlik doğrulamasının başarısız olmasına neden olur.
Çözüm
Yeni IoT hub'ına geçiş yaparken (DPS kullanmadığını varsayarak) şu adımları sırayla izleyin:
- Cihaz kimliklerini eski IoT hub'ından yenisine aktarmak ve içeri aktarmak için bu kılavuzu izleyin
- Yeni IoT hub'ında tüm IoT Edge dağıtımlarını ve yapılandırmalarını yeniden yapılandırma
- Yeni IoT hub'ında tüm üst-alt cihaz ilişkilerini yeniden yapılandırma
- Her cihazı yeni IoT hub ana bilgisayar adına işaret etmek için güncelleştirin (
iothub_hostname
içindeconfig.toml
altında[provisioning]
) - Cihaz dışarı aktarma sırasında kimlik doğrulama anahtarlarını dışlama seçeneğini belirlediyseniz, her cihazı yeni IoT hub'ı tarafından verilen yeni anahtarlarla yeniden yapılandırın (
device_id_pk
altında[provisioning.authentication]
config.toml
) - Önce üst düzey üst Edge cihazını yeniden başlatın, çalışır durumda olduğundan emin olun
- Hiyerarşi düzeyindeki her cihazı yukarıdan aşağıya doğru düzeye göre yeniden başlatın
IoT Edge, Coğrafi olarak IoT Hub'dan uzak olduğunda düşük ileti aktarım hızına sahiptir
Belirtiler
Azure IoT Hub'dan coğrafi olarak uzak olan Azure IoT Edge cihazları beklenenden daha düşük ileti aktarım hızına sahiptir.
Neden
Cihaz ve IoT Hub arasındaki yüksek gecikme süresi beklenenden daha düşük bir ileti aktarım hızına neden olabilir. IoT Edge, 10 varsayılan ileti toplu iş boyutu kullanır. Bu, tek bir toplu işte gönderilen iletilerin sayısını sınırlar ve bu da cihaz ile IoT Hub arasındaki gidiş dönüş sayısını artırır.
Çözüm
IoT Edge Hub MaxUpstreamBatchSize ortam değişkenini artırmayı deneyin. Bu, cihaz ile IoT Hub arasındaki gidiş dönüş sayısını azaltan tek bir toplu işte daha fazla ileti gönderilmesini sağlar.
Azure portalında Azure Edge Hub ortam değişkenlerini ayarlamak için:
- 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ı sekmesinde, MaxUpstreamBatchSize ortam değişkenini 20 değerine sahip Sayı türüne ekleyin.
- Uygula’yı seçin.
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.