IoT Edge cihazınızın sorunlarını giderme

Şunlar için geçerlidir:IoT Edge 1.4 checkmark IoT Edge 1.4

Önemli

IoT Edge 1.4 desteklenen sürümdür. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

Ortamınızda Azure IoT Edge'i çalıştırırken sorun yaşıyorsanız, sorun giderme ve tanılama için kılavuz olarak bu makaleyi kullanın.

'check' komutunu çalıştırın

IoT Edge sorunlarını giderirken ilk adımınız, yaygın sorunlar için bir yapılandırma ve bağlantı testleri koleksiyonu çalıştıran komutunu kullanmak check olmalıdır. Komut check 1.0.7 ve sonraki sürümlerde kullanılabilir.

Dekont

Sorun giderme aracı, IoT Edge cihazının ara sunucunun arkasında olup olmadığını denetleyemiyor.

Komutu aşağıdaki gibi çalıştırabilir veya seçeneklerin check--help tam listesini görmek için bayrağını ekleyebilirsiniz:

sudo iotedge check

Sorun giderme aracı, şu üç kategoriye göre sıralanmış birçok denetim çalıştırır:

  • Yapılandırma denetimleri , yapılandırma dosyası ve kapsayıcı altyapısıyla ilgili sorunlar da dahil olmak üzere IoT Edge cihazlarının buluta bağlanmasını engelleyebilecek ayrıntıları inceler.
  • Bağlan ion denetimleri, IoT Edge çalışma zamanının konak cihazdaki bağlantı noktalarına erişebildiğini ve tüm IoT Edge bileşenlerinin IoT Hub'a bağlanabildiğini doğrular. Bu denetim kümesi, IoT Edge cihazı bir ara sunucu arkasındaysa hatalar döndürür.
  • Üretime hazır olma denetimleri , cihaz sertifika yetkilisi (CA) sertifikalarının durumu ve modül günlük dosyası yapılandırması gibi önerilen en iyi üretim yöntemlerini arar.

IoT Edge denetim aracı, tanılamasını çalıştırmak için bir kapsayıcı kullanır. kapsayıcı görüntüsü, mcr.microsoft.com/azureiotedge-diagnostics:latestMicrosoft Container Registry aracılığıyla kullanılabilir. İnternet'e doğrudan erişimi olmayan bir cihazda denetim çalıştırmanız gerekiyorsa, cihazlarınızın kapsayıcı görüntüsüne erişmesi gerekir.

İç içe IoT Edge cihazlarının kullanıldığı bir senaryoda, görüntüyü üst cihazlar aracılığıyla yönlendirerek aşağı akış cihazlarında tanılama görüntüsüne erişebilirsiniz.

sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:<port_for_api_proxy_module>/azureiotedge-diagnostics:1.2

Hata veya uyarı alırsanız yapmanız gerekenler de dahil olmak üzere bu aracın çalıştığı tanılama denetimlerinin her biri hakkında bilgi için bkz . IoT Edge sorun giderme denetimleri.

'support-bundle' komutuyla hata ayıklama bilgilerini toplama

Bir IoT Edge cihazından günlükleri toplamanız gerektiğinde, en uygun yol komutunu kullanmaktır support-bundle . Varsayılan olarak, bu komut modül, IoT Edge güvenlik yöneticisi ve kapsayıcı altyapısı günlükleri, iotedge check JSON çıkışı ve diğer yararlı hata ayıklama bilgilerini toplar. Kolay paylaşım için bunları tek bir dosyaya sıkıştırır. Komut support-bundle 1.0.9 ve sonraki sürümlerde kullanılabilir.

Geçmişten support-bundle günlükleri ne kadar süreyle almak istediğinizi belirtmek için komutunu bayrağıyla --since çalıştırın. Örneğin 6h , son altı günden bu yana, 6d son altı dakikadan 6m bu yana son altı saatten bu yana günlükleri alır. Seçeneklerin --help tam listesini görmek için bayrağını ekleyin.

sudo iotedge support-bundle --since 6h

Varsayılan olarak, komut, komutun support-bundle çağrıldığı dizinde support_bundle.zip adlı bir zip dosyası oluşturur. Çıkış için farklı bir yol veya dosya adı belirtmek için bayrağını --output kullanın.

Komut hakkında daha fazla bilgi için yardım bilgilerini görüntüleyin.

iotedge support-bundle --help

Ayrıca, support-bundle komutunun çıkışını Azure Blob Depolama yüklemek için UploadSupportBundle yerleşik doğrudan yöntem çağrısını da kullanabilirsiniz.

Uyarı

Komutun support-bundle çıkışı konak, cihaz ve modül adlarını, modülleriniz tarafından günlüğe kaydedilen bilgileri vb. içerebilir. Çıktıyı genel bir forumda paylaşıyorsanız lütfen bunu unutmayın.

Çalışma zamanından toplanan ölçümleri gözden geçirme

IoT Edge çalışma zamanı modülleri, IoT Edge cihazlarınızın durumunu izlemenize ve anlamanıza yardımcı olacak ölçümler oluşturur. Bu ölçümleri toplamayı ve daha kolay izleme için buluta göndermeyi işlemek için dağıtımlarınıza ölçüm toplayıcı modülünü ekleyin.

Daha fazla bilgi için bkz . Ölçümleri toplama ve taşıma.

IoT Edge sürümünüzü denetleyin

IoT Edge'in eski bir sürümünü çalıştırıyorsanız, yükseltme yapmak sorununuzu çözebilir. Araç, iotedge check IoT Edge güvenlik daemon'unun en son sürüm olup olmadığını denetler, ancak IoT Edge hub'ı ve aracı modüllerinin sürümlerini denetlemez. Cihazınızdaki çalışma zamanı modüllerinin sürümünü denetlemek için ve iotedge logs edgeHubkomutlarını iotedge logs edgeAgent kullanın. Modül başlatıldığında sürüm numarası günlüklerde bildirilir.

Cihazınızı güncelleştirme yönergeleri için bkz . IoT Edge güvenlik daemon'unu ve çalışma zamanını güncelleştirme.

Cihazlarınıza IoT Edge yüklemesini doğrulama

EdgeAgent modül ikizini izleyerek cihazlarınıza IoT Edge yüklemesini doğrulayabilirsiniz.

En son edgeAgent modül ikizini almak için Azure Cloud Shell'den aşağıdaki komutu çalıştırın:

az iot hub module-twin show --device-id <edge_device_id> --module-id '$edgeAgent' --hub-name <iot_hub_name>

Bu komut, edgeAgent tarafından bildirilen tüm özelliklerin çıkışını alır. Cihazın durumunu izleyen bazı yararlı cihazlar şunlardır:

  • çalışma zamanı durumu
  • çalışma zamanı başlangıç saati
  • çalışma zamanı son çıkış saati
  • çalışma zamanı yeniden başlatma sayısı

IoT Edge güvenlik yöneticisinin ve günlüklerinin durumunu denetleyin

IoT Edge güvenlik yöneticisi, IoT Edge sistemini başlangıçta başlatma ve cihazları sağlama gibi işlemlerde sorumludur. IoT Edge başlatılmıyorsa güvenlik yöneticisi günlükleri yararlı bilgiler sağlayabilir.

  • IoT Edge sistem hizmetlerinin durumunu görüntüleyin:

    sudo iotedge system status
    
  • IoT Edge sistem hizmetlerinin günlüklerini görüntüleyin:

    sudo iotedge system logs -- -f
    
  • IoT Edge sistem hizmetlerinin daha ayrıntılı günlüklerini görüntülemek için hata ayıklama düzeyi günlükleri etkinleştirin:

    1. Hata ayıklama düzeyi günlüklerini etkinleştirin.

      sudo iotedge system set-log-level debug
      sudo iotedge system restart
      
    2. Hata ayıklamadan sonra varsayılan bilgi düzeyi günlüklerine geri dönün.

      sudo iotedge system set-log-level info
      sudo iotedge system restart
      

Kapsayıcı günlüklerini denetle

IoT Edge güvenlik daemon'ı çalıştırıldıktan sonra, sorunları algılamak için kapsayıcıların günlüklerine bakın. Dağıtılan kapsayıcılarınızla başlayın, ardından IoT Edge çalışma zamanını oluşturan kapsayıcılara bakın: edgeAgent ve edgeHub. IoT Edge aracı günlükleri genellikle her kapsayıcının yaşam döngüsü hakkında bilgi sağlar. IoT Edge hub günlükleri mesajlaşma ve yönlendirme hakkında bilgi sağlar.

Kapsayıcı günlüklerini çeşitli yerlerden alabilirsiniz:

Kapsayıcı günlüklerini temizleme

Moby kapsayıcı altyapısı varsayılan olarak kapsayıcı günlüğü boyutu sınırlarını ayarlamaz. Zaman içinde kapsamlı günlükler cihazın günlüklerle dolmasına ve disk alanının bitmesine neden olabilir. Büyük kapsayıcı günlükleri IoT Edge cihaz performansınızı etkiliyorsa, kapsayıcıyı ilgili günlükleriyle birlikte kaldırmaya zorlamak için aşağıdaki komutu kullanın.

Sorun gidermeye devam ediyorsanız, bu adımı atmak için kapsayıcı günlüklerini inceleyene kadar bekleyin.

Uyarı

Teslim edilmemiş ileti kapsamına sahipken edgeHub kapsayıcısını kaldırmaya zorlarsanız ve konak depolama alanı ayarlanmamışsa, teslim edilmemiş iletiler kaybolur.

docker rm --force <container name>

Devam eden günlük bakımı ve üretim senaryoları için Varsayılan günlük sürücüsünü ayarlayın.

IoT Edge hub'ına giden iletileri görüntüleme

IoT Edge hub'ından geçen iletileri görüntüleyebilir ve çalışma zamanı kapsayıcılarından ayrıntılı günlüklerden içgörüler toplayabilirsiniz. Bu kapsayıcılarda ayrıntılı günlükleri açmak için dağıtım bildiriminde RuntimeLogLevel ortam değişkenini ayarlayın.

IoT Edge hub'ına giden iletileri görüntülemek için edgeHub modülü için ortam değişkenini debug olarak ayarlayınRuntimeLogLevel.

Hem edgeHub hem de edgeAgent modülleri, varsayılan değeri olarak ayarlanmış olan bu çalışma zamanı günlük ortamı değişkenine infosahiptir. Bu ortam değişkeni aşağıdaki değerleri alabilir:

  • Ölümcül
  • error
  • uyarı
  • Bilgi
  • hata ayıkla
  • ayrıntılı

IoT Hub ile IoT cihazları arasında gönderilen iletileri de de kontrol edebilirsiniz. Visual Studio Code için Azure IoT Hub uzantısını kullanarak bu iletileri görüntüleyin. Daha fazla bilgi için bkz . Azure IoT ile geliştirme yaparken kullanışlı araç.

Kapsayıcıları yeniden başlatma

Bilgi için günlükleri ve iletileri araştırdıktan sonra kapsayıcıları yeniden başlatmayı deneyebilirsiniz.

IoT Edge cihazında modülleri yeniden başlatmak için aşağıdaki komutları kullanın:

iotedge restart <container name>

IoT Edge çalışma zamanı kapsayıcılarını yeniden başlatın:

iotedge restart edgeAgent && iotedge restart edgeHub

Modülleri Azure portalından uzaktan da yeniden başlatabilirsiniz. Daha fazla bilgi için bkz . Azure portalından IoT Edge cihazlarını izleme ve sorunlarını giderme.

Güvenlik duvarınızı ve bağlantı noktası yapılandırma kurallarınızı denetleme

Azure IoT Edge, desteklenen IoT Hub protokollerini kullanarak şirket içi sunucudan Azure bulutuyla iletişime olanak tanır. Bkz . İletişim protokolü seçme. Gelişmiş güvenlik için, Azure IoT Edge ile Azure IoT Hub arasındaki iletişim kanalları her zaman Giden olarak yapılandırılır. Bu yapılandırma, kötü amaçlı bir varlığın keşfedilmesi için saldırı yüzeyini en aza indiren Hizmetler Destekli İletişim düzenini temel alır. Gelen iletişim yalnızca Azure IoT Hub'ın Azure IoT Edge cihazına ileti göndermesi gereken belirli senaryolar için gereklidir. Buluttan cihaza iletiler güvenli TLS kanalları kullanılarak korunur ve X.509 sertifikaları ve TPM cihaz modülleri kullanılarak daha da güvenli hale getirilebilir. Bu iletişimin nasıl kurulabileceğini Azure IoT Edge Güvenlik Yöneticisi yönetir. Bkz . IoT Edge Güvenlik Yöneticisi.

IoT Edge, Azure IoT Edge çalışma zamanının ve dağıtılan modüllerin güvenliğini sağlamak için gelişmiş yapılandırma sağlarken, temel alınan makineye ve ağ yapılandırmasına bağımlıdır. Bu nedenle, güvenli kenardan buluta iletişim için uygun ağ ve güvenlik duvarı kurallarının ayarlandığından emin olmak zorunlu olur. Aşağıdaki tablo, Azure IoT Edge çalışma zamanının barındırıldığı temel sunucular için güvenlik duvarı kurallarını yapılandırma yönergeleri olarak kullanılabilir:

Protokol Bağlantı noktası Gelen Giden Rehber
MQTT 8883 ENGELLİ (Varsayılan) ENGELLİ (Varsayılan)
  • İletişim protokolü olarak MQTT kullanılırken Giden (Giden) öğesini Açık olacak şekilde yapılandırın.
  • MQTT için 1883, IoT Edge tarafından desteklenmez.
  • Gelen (Gelen) bağlantılar engellenmelidir.
AMQP 5671 ENGELLİ (Varsayılan) AÇ (Varsayılan)
  • IoT Edge için varsayılan iletişim protokolü.
  • Azure IoT Edge desteklenen diğer protokoller için yapılandırılmadıysa veya AMQP istenen iletişim protokolüyse Açık olarak yapılandırılmalıdır.
  • AMQP için 5672, IoT Edge tarafından desteklenmez.
  • Azure IoT Edge desteklenen farklı bir IoT Hub protokolü kullandığında bu bağlantı noktasını engelleyin.
  • Gelen (Gelen) bağlantılar engellenmelidir.
HTTPS 443 ENGELLİ (Varsayılan) AÇ (Varsayılan)
  • Giden (Giden) öğesini IoT Edge sağlama için 443'te Açık olacak şekilde yapılandırın. El ile betikler veya Azure IoT Cihaz Sağlama Hizmeti (DPS) kullanılırken bu yapılandırma gereklidir.
  • Gelen (Gelen) bağlantı yalnızca belirli senaryolar için Açık olmalıdır:
    • Yöntem istekleri gönderebilen aşağı akış cihazlarına sahip saydam bir ağ geçidiniz varsa. Bu durumda, IoTHub'a bağlanmak veya Azure IoT Edge aracılığıyla IoTHub hizmetleri sağlamak için 443 numaralı bağlantı noktasının dış ağlara açık olması gerekmez. Bu nedenle, gelen kural yalnızca iç ağdan gelen (Gelen) öğesini açmakla kısıtlanabilir.
    • İstemciden Cihaza (C2D) senaryoları için.
  • HTTP için 80, IoT Edge tarafından desteklenmez.
  • KURULUŞta HTTP dışı protokoller (örneğin AMQP veya MQTT) yapılandırılamıyorsa; iletiler WebSockets üzerinden gönderilebilir. Bu durumda WebSocket iletişimi için 443 numaralı bağlantı noktası kullanılır.

Son çare: tüm kapsayıcıları durdurma ve yeniden oluşturma

Bazen bir sistem, mevcut ağ veya işletim sistemi kısıtlamalarıyla çalışmak için önemli ölçüde özel değişiklikler gerektirebilir. Örneğin, bir sistem farklı bir veri diski bağlama ve ara sunucu ayarları gerektirebilir. Önceki tüm adımları denediyseniz ve yine de kapsayıcı hataları aldıysanız, docker sistemi önbellekleri veya kalıcı ağ ayarları en son yeniden yapılandırmayla güncel olmayabilir. Bu durumda, son çare seçeneği sıfırdan temiz bir başlangıç yapmaktır docker prune .

Aşağıdaki komut IoT Edge sistemini (ve dolayısıyla tüm kapsayıcıları) durdurur ve tüm kapsayıcıları ve birimleri kaldırmak için docker prune "tümü" ve "birim" seçeneğini kullanır. Komutun sorun olduğu uyarısını gözden geçirin ve hazır olduğunuzda ile onaylayın y .

sudo iotedge system stop
docker system prune --all --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

Sistemi yeniden başlatın. Güvenli olmak için, kalan olası yapılandırmaları uygulayın ve sistemi tek bir komutla başlatın.

sudo iotedge config apply

Birkaç dakika bekleyin ve yeniden kontrol edin.

sudo iotedge list

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.