Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Applies to:
IoT Edge 1.5
Önemli
IoT Edge 1,5 LTS, desteklenen sürümdür. IoT Edge 1.4 LTS, 12 Kasım 2024'te kullanım ömrüne ulaştı. Önceki bir sürümü kullanıyorsanız bkz. Update IoT Edge.
IoT Edge çözümleri 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 bilgi için bkz. IoT Edge cihazınızda sorun giderme.
Sağlama ve dağıtım
IoT Edge modülü başarıyla dağıtılır ve cihazdan kaybolur
Belirtiler
IoT Edge bir cihaz için modülleri ayarladı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. Set modülleri işlevi Azure portalında veya Tek cihaz için dağıtım oluştur işlevi Visual Studio Code'da bir an için geçerlilik kazanır. 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 özelliklerinde değişiklik yapar.
Çö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. Cihaz ikizini artık otomatik dağıtımın hedef açıklamasıyla eşleşmeyecek şekilde güncelleştirebilirsiniz.
Daha fazla bilgi için bkz. Tek cihazlar veya geniş ö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 bağlanmaya çalıştığını ve ardından WebSocket üzerinden AMQP kullanarak bağlanmaya çalıştığını gösterir. Bu bağlantı başarısız olduğunda, IoT Edge aracısı kapanır.
Ö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ı, iletişim kuracak modüllerin her biri için bir ağ ayarlar. Linux’ta bu ağ bir köprü ağıdır. Windows nat kullanır. Bu sorun, NAT ağını kullanan Windows kapsayıcıları kullanan Windows cihazlarda daha yaygındır.
Çözüm
Bu köprüye veya NAT ağına atanmış IP adresleri için İnternet'e giden bir yol olduğundan emin olun. Bazen konak üzerindeki bir 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
sudo iotedge checkçalıştırdığınızda, Container 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 bkz. 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şayabilir.
- IoT Edge'nin anlık yüklemesini kullanırsanız Docker yapılandırma dosyası farklı bir konumdadır. Bkz. çözüm seçeneği 3.
Çözüm
1. Seçenek: Kapsayıcı altyapısı ayarlarında DNS sunucusunu ayarlama
Kapsayıcı altyapısı ayarlarında ortamınız için DNS sunucusunu belirtin. Bu ayarlar, motorun başlattığı tüm kapsayıcı modülleri için geçerlidir. daemon.jsonadlı 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ı vardır ve genel DNS sunucularına erişime izin vermezler. Bu nedenle, uç cihazınız bir genel DNS sunucusuna erişemiyorsa, bunu erişilebilir bir DNS sunucusu adresiyle değiştirin.
Cihazınızdaki daemon.json dizinine /etc/docker yerleştirin.
Konumda zaten bir daemon.json dosya varsa, dosyaya dns anahtarını ekleyin ve dosyayı kaydedin.
Güncellemelerin etkili olması için kapsayıcı motorunu yeniden başlatın.
sudo systemctl restart docker
Option 2: Modül başına IoT Edge dağıtımında DNS sunucusunu ayarlayın
IoT Edge dağıtımında her modülün createOptions bölümü için DNS sunucusunu ayarlayabilirsiniz. Örneğin:
"createOptions": {
"HostConfig": {
"Dns": [
"x.x.x.x"
]
}
}
Uyarı
Bu yöntemi kullanır ve yanlış DNS adresi belirtirseniz edgeAgent IoT Hub bağlantısını 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. Yeni bir IoT Edge örneği 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'i bir snap paketi olarak yüklerseniz, Docker yapılandırma dosyasının konumunu belirtmek için --container-engine-config-file parametresini kullanın. Örneğin, Docker yapılandırma dosyası konumunda /var/snap/docker/current/config/daemon.jsonbulunuyorsa ş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 uygulamasının Docker uygulamasına okuma erişimi olmadığından hata bildiriliyor. 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ı Kenar Aracısı modülü 'boş kenar aracı yapılandırması' bildirir ve 'geçici ağ hatasına' neden olur.
Belirtiler
LTE bağlantısıyla yapılandırılmış bir cihazda dağıtımda tanımlanan modülleri başlatma sorunları vardır. edgeAgent IoT Hub'a bağlanamıyor ve "boş edge agent yapılandırması" ve "geçici ağ hatası oluştu" sözlerini bildiriyor.
Neden
Bazı ağlarda, paket yükü, varsayılan docker ağı MTU'sunun (1500) çok yüksek olmasına neden olur ve bu da paket parçalanmasına yol açar. Bu parçalanma dış kaynaklara erişimi engeller.
Çö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ın MTU değerinden yüksek olamaz. Daha fazla bilgi için İnternet Servis Sağlayıcınıza (ISS) 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. Docker ağı için MTU değerini 1430 olarak ayarlayın.
Azure ağını durdurun ve kaldırın.
docker network rm azure-iot-edgeAzure ağını yeniden oluşturun.
docker network create --opt com.docker.network.driver.mtu=1430 azure-iot-edgeTü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ı 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ı bildiriyor.
Neden
IoT Edge aracısı 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 manifestonuzda doğru olduğundan emin olun.
IoT Edge aracısı aşırı kimlik çağrıları yapar
Belirtiler
IoT Edge aracısı, Azure IoT Hub'a aşırı kimlik çağrıları yapıyor.
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ı'nın yeniden deneme mantığı, dağıtımı yeniden denemeye devam ediyor. 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, IoT Edge aracısı dağıtım bildirimi düzeltilene kadar 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 biri gibi 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)
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)
Neden
Konak makinedeki başka bir işlem, edgeHub modülünün bağlamaya çalıştığı bir bağlantı noktasını önceden bağladı. 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ılamıyor.
Çözüm
Bu sorunu iki yoldan biriyle çözün:
IoT Edge cihazı bir ağ geçidi cihazı olarak işlev görürse 443, 5671 veya 8883 numaralı bağlantı noktasını kullanan işlemi bulun ve durdurun. 443 numaralı bağlantı noktası hatası genellikle diğer işlemin bir web sunucusu olduğu anlamına gelir.
IoT Edge cihazı ağ geçidi olarak kullanmanız gerekmiyorsa edgeHub modül oluşturma seçeneklerinden bağlantı noktası bağlamalarını kaldırın. 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ı 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.
edgeHubedgeAgent 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" }createOptionssatırını ve ondan öncekiimagesatırının sonundaki virgülü 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 Create öğesini seçin.
IoT Edge modülü edgeHub'a ileti gönderemiyor ve 404 hatası döndürüyor
Belirtiler
Özel bir IoT Edge modülü IoT Edge hub'ına ileti gönderemez ve 404 Module not found hatası döndürür. 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
Güvenlik nedeniyle, IoT Edge çalışma zamanı edgeHub'a bağlanan tüm modüller için işlem tanımlamayı zorunlu kılır. Bir modülün gönderdiği tüm iletilerin modülün ana işlem kimliğinden geldiğini doğrular. Modül farklı bir işlem kimliğinden ileti göndermeye çalışırsa, çalışma zamanı iletiyi reddeder ve 404 hata iletisi döndürür.
Çözüm
Sürüm 1.0.7'den itibaren tüm modül işlemleri bağlanabilir. Daha fazla bilgi için bkz. 1.0.7 sürüm değişiklik günlüğü.
Sürüm 1.0.7'ye yükseltemiyorsanız şu adımları izleyin. Özel IoT Edge modülünün edgeHub'a ileti göndermek için her zaman aynı işlem kimliğini kullandığından emin olun. Örneğin, Docker dosyanızda ENTRYPOINT komutu yerine CMD komutunu kullanın. Komutun CMD sonucunda 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 elde edebilirsiniz. Komut tek ENTRYPOINT bir işlem kimliğiyle sonuç verir.
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, performans için optimize edilmiş olarak varsayılan bir yapılandırmaya sahiptir 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 iki yoldan biriyle ayarlayabilirsiniz:
Azure portalında:
IoT Hub'unuzda, IoT Edge cihazınızı seçin. Cihaz ayrıntıları sayfasında ModülLer > Çalışma Zamanı Ayarlarını Ayarla'yı seçin.
OptimizeForPerformance adlı IoT Edge hub modülü için True/False türünde bir ortam değişkeni oluşturun ve False olarak ayarlayın.
Değişikliklerinizi 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şlatılamıyor
Belirtiler
Güvenlik daemon'ı başlatılamıyor ve modül kapsayıcıları oluşturulmuyor. IoT Edge hizmeti edgeAgent, edgeHub veya diğer özel modülleri başlatmaz. Günlüklerde aziot-edged şu hata iletisini 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 varsayılan olarak systemd yuva etkinleştirmesini kullanır. Soket etkinleştirmeyi devre dışı bırakmak için yapılandırma dosyasını değiştirir ancak URL'leri /var/run/iotedge/*.sock olarak tutarsanız bir izin hatası alırsınız. Kullanıcı iotedge adresine /var/run/iotedgeyazamaz, bu nedenle yuvaların kilidini açamaz ve takamaz. CentOS kullanım ömrü sonudur (EOL). Daha fazla bilgi için bkz. CentOS Kullanım Süresi Sonu kılavuzu.
Çözüm
Yuva etkinleştirmeyi destekleyen bir dağıtım kullanıyorsanız, yuva etkinleştirmesini kapatmayın. Eğer soket etkinleştirmesi kullanmak istemiyorsanız, yuvaları /var/lib/iotedge/ yerleştirin.
-
systemctl disable iotedge.socket iotedge.mgmt.socketkomutunu çalıştırarak, systemd'in yuva birimlerini başlatmaması için devre dışı bırakın. - iotedge yapılandırmasını hem
/var/lib/iotedge/*.sockhem deconnectbölümlerindelistenkullanılacak şekilde değiştirin - Modülleriniz zaten varsa eski
/var/run/iotedge/*.sockbağlamalarına sahiptir, bu yüzden onları kaldırmak içindocker rm -fkomutunu çalıştırın.
İleti kuyruğu temizleme işlemi yavaş
Belirtiler
İletiler işlendikten sonra ileti kuyruğu temizlenmez. İ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
İstemci iletisi TTL (yaşam süresi) ve EdgeHubMessageCleanupIntervalSecs ortam değişkeni ileti temizleme aralığını denetler. Varsayılan ileti TTL değeri iki saattir ve varsayılan MessageCleanupIntervalSecs değer 30 dakikadır. Uygulamanız varsayılan değerden daha kısa bir TTL değeri kullanıyorsa ve değeri ayarlamazsanız MessageCleanupIntervalSecs , süresi dolan iletiler bir sonraki temizleme aralığına kadar temizlenmez.
Çözüm
Uygulamanızın TTL değerini varsayılan değerden daha kısa bir değerle değiştirirseniz, MessageCleanupIntervalSecs değerini de ayarlayın. Değer, MessageCleanupIntervalSecs 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, değeri bir dakika olarak ayarlayın MessageCleanupIntervalSecs . 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ünün 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.
Özel modüller, Edge CA sertifika yenilemesi sonrasında ileti göndermeyi durduruyor
Belirtiler
Özel modüller, varsayılan 30 günlük hızlı başlangıç Edge CA sertifikası kullanılırken veya yapılandırılan sertifika ömrünün 80% kullanılırken genellikle yaklaşık 24-30 gün süreyle çalıştırıldıktan sonra EdgeHub ile iletişimi durdurur. EdgeHub ve EdgeAgent modülleri çalışmaya devam eder, ancak özel modüller artık EdgeHub üzerinden ileti gönderemez veya alamaz.
Neden
Edge CA sertifikası otomatik olarak yenilendiğinde, IoT Edge durdurulur ve yeni sunucu sertifikaları almaları için tüm modülleri yeniden başlatır. Yeniden başlatmadan sonra modüllerin EdgeHub bağlantısını yeniden başlatması gerekir. Özel bir modül bağlantı yeniden deneme mantığını uygulamazsa, yeni EdgeHub sunucu sertifikası henüz kullanılamadığından veya modül ilk bağlantı denemesini yeniden denemediğinden modül başlatılır ancak EdgeHub'a yeniden bağlanamaz.
Çözüm
Sertifika yenileme olayları için EdgeAgent günlüklerini denetleyin:
sudo iotedge logs edgeAgent | grep -i "renewal"
Bunu çözmek için:
- Her özel modülün dağıtım bildirimine
"restartPolicy": "always"dahil edildiğini doğrulayın. - Özel modüllerde bağlantı yeniden deneme mantığını uygulayın. Azure IoT cihaz SDK'sının yerleşik yeniden deneme ilkelerini kullanın veya modülün yeniden başlatma sonrasında EdgeHub'a otomatik olarak yeniden bağlanması için üstel geri alma yeniden deneme mantığı ekleyin. Daha fazla bilgi için bkz. Azure IoT Hub cihaz SDK'larını kullanarak bağlantı ve güvenilir mesajlaşmayı yönetme.
- Yenileme kesintisinin ne zaman gerçekleştiğini denetlemek için değerini yüzde yerine mutlak bir saat olarak ayarlayın
threshold. Örneğin,threshold = "10d"sertifikanın süresi dolmadan 10 gün önce yenilemeyi tetikler. Daha fazla bilgi için bkz . Edge CA yenilemesini planlama.
IoT Edge Hub, AMQP protokolü kullanılırken System.FormatException hatası bildiriyor
Belirtiler
IoT Edge bir cihazdan IoT Hub'a AMQP protokolünü kullanarak iletileri yönlendirdiğinizde ve iothub-creation-time-utc özelliğini giden cihaz iletileri üzerine ayarladığınızda, IoT Edge Hub bir System.FormatException hatası bildirir. Hata iletisi aşağıdakine benzer:
System.FormatException: String '2024-12-01T00:00:0.000Z' was not recognized as a valid DateTime.
Neden
Değer iot-hub-creation-time-utc katı biçim ölçütlerini karşılamıyor. Edge Hub'ın gerektirdiği biçim, ISO 8601'in bir alt kümesidir.
Çözüm
Bu sorun, AMQP protokolü için IoT Edge Hub'da bilinen bir sorundur. Şu anda ürün ekibi bir düzeltmeyi araştırıyor. MQTT protokolünde bu sorun yoktur.
Ağ
IoT Edge güvenlik daemon'u geçersiz bir ana bilgisayar adıyla başarısız oluyor
Belirtiler
IoT Edge güvenlik yöneticisi günlüklerini kontrol etme girişimi başarısız oluyor ve aşağıdaki mesajı görüntülüyor:
Error parsing user input data: invalid hostname. Hostname cannot be empty or greater than 64 characters
Neden
IoT Edge çalışma zamanı 64 karakterden kısa konak adlarını destekler. 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 makineler 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ırarak ve ardından kurulum komutunda DNS adını ana bilgisayar adı olarak ayarlayarak bu hatayı düzeltin.
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 Bilgiler altında var olan >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 cihazda yapılandırma dosyasını açın.
sudo nano /etc/aziot/config.tomldeğerini
hostnameDNS adınız ile değiştirin.Dosyayı kaydedip kapatın, ardından değişiklikleri IoT Edge uygulayın.
sudo iotedge config apply
IoT Edge modülü bağlantı hatalarını bildiriyor
Belirtiler
IoT Edge çalışma zamanı modülleri dahil, doğrudan bulut hizmetlerine bağlanan modüller beklenildiği gibi çalışmayı durdurur ve bağlantı veya ağ problemleriyle 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 varsayılan olarak IP paketi iletmeyi etkinleştirir, ancak devre dışı bırakırsanız 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.confDosyaya aşağıdaki satırı ekleyin.
net.ipv4.ip_forward=1Dosyayı 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 cihaz HTTP istekleri gerçekleştiremiyor veya 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 Could not perform HTTP request raporlar.
Neden
IoT Edge bir ağ geçidinin arkasındaki cihazlar, modül görüntülerini yapılandırma dosyasının parent_hostname alanında belirtilen ü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şamaması anlamına gelir.
Çözüm
Ana IoT Edge cihazının, aşağı hat IoT Edge cihazdan 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ğlantı kuramıyor
Belirtiler
Bir IoT Edge cihaz hiyerarşisini bir IoT hub'tan diğerine geçirdiğinizde, en üst düzeydeki üst IoT Edge cihaz IoT Hub'a bağlanır, ancak alt bağlantılı IoT Edge cihazlar bağlanamaz. Günlükler Unable to authenticate client downstream-device/$edgeAgent with module credentials rapor ediyor.
Neden
Geçiş, aşağı akış cihazlarının kimlik bilgilerini düzgün bir şekilde güncelleştirmedi. Bu sorun nedeniyle, edgeAgent ve edgeHub modüllerinin, açıkça ayarlamazsanız varsayılan olan none kimlik doğrulama türü vardır. 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ş yaptığınızda (DPS kullanmadığınızı varsayarsak) ş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 edecek şekilde güncelleyin (
iothub_hostname[provisioning]içindeconfig.tomlaltında) - 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_pkaltında[provisioning.authentication]config.toml) - Önce en üst düzey ana Edge cihazını yeniden başlatın, çalışıyor 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 uzak olduğunda düşük ileti aktarım hızına sahiptir
Belirtiler
Azure IoT Hub coğrafi olarak uzak olan Azure IoT Edge cihazların ileti aktarım hızı daha düşüktür.
Neden
Cihaz ile IoT Hub arasındaki yüksek gecikme süresi ileti aktarım hızının düşmesine neden olur. IoT Edge varsayılan olarak 10 mesajlık bir toplu iş boyutu kullanır. Bu toplu iş boyutu, tek bir toplu işte gönderilen iletilerin sayısını sınırlar ve bu da cihazla 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 değişiklik, cihazla IoT Hub arasındaki gidiş dönüş sayısını azaltan tek bir partide daha fazla mesaj gönderir.
Azure portalında Azure Edge Hub ortam değişkenlerini ayarlamak için:
- IoT Hub gidin ve Device management menüsünün altında Devices öğesini seçin.
- Güncelleştirmek istediğiniz IoT Edge cihazı 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.
- seçin, sonra daUygula'yı seçin.
Sonraki adımlar
IoT Edge platformunda bir hata bulduğunuzu mu düşünüyorsunuz? Submit an issue böylece ürün ekibi platformu geliştirmeye devam edebilir.
Daha fazla sorunuz varsa yardım için Support isteği oluşturun.