Bagikan melalui


Solusi masalah umum untuk Azure IoT Edge

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang merupakan status End Of Life (EOL). Harap pertimbangkan penggunaan dan perencanaan Anda yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Berlaku untuk: Tanda centang IoT Edge 1.5 IoT Edge 1.5 Tanda centang IoT Edge 1.4 IoT Edge 1.4

Penting

IoT Edge 1.5 LTS dan IoT Edge 1.4 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai pada 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.

Gunakan artikel ini untuk mengidentifikasi dan mengatasi masalah umum saat menggunakan solusi IoT Edge. Jika Anda memerlukan informasi tentang cara menemukan log dan kesalahan dari perangkat IoT Edge Anda, lihat Memecahkan masalah perangkat IoT Edge Anda.

Provisi dan Penyebaran

Modul IoT Edge berhasil menyebarkan dan kemudian menghilang dari perangkat

Gejala

Setelah mengatur modul untuk perangkat IoT Edge, modul berhasil disebarkan tetapi setelah beberapa menit modul menghilang dari perangkat dan dari detail perangkat di portal Azure. Modul selain yang ditentukan mungkin juga muncul pada perangkat.

Penyebab

Jika penyebaran otomatis menargetkan perangkat, ia lebih memprioritaskan pada pengaturan modul secara manual untuk satu perangkat. Fungsionalitas Atur modul di portal Azure atau Buat penyebaran untuk fungsionalitas perangkat tunggal di Visual Studio Code berlaku sejenak. Anda akan melihat modul yang Anda tentukan untuk dimulai pada perangkat. Kemudian prioritas penyebaran otomatis dimulai dan menimpa properti yang diinginkan perangkat.

Solusi

Hanya gunakan satu jenis mekanisme penyebaran per perangkat, baik penyebaran otomatis atau penyebaran perangkat individu. Jika Anda memiliki beberapa penyebaran otomatis yang menargetkan perangkat, Anda dapat mengubah deskripsi prioritas atau target untuk memastikan penyebaran yang benar diterapkan ke perangkat tersebut. Anda juga dapat memperbarui kembaran perangkat agar tidak lagi cocok dengan deskripsi target penyebaran otomatis.

Untuk informasi selengkapnya, lihat Memahami penyebaran otomatis IoT Edge untuk satu perangkat atau dalam skala besar.

Runtime bahasa umum IoT Edge

Agen IoT Edge berhenti setelah satu menit

Gejala

Modul edgeAgent dimulai dan berjalan dengan sukses selama sekitar satu menit, lalu berhenti. Log mengindikasikan bahwa agen IoT Edge mencoba untuk terhubung ke IoT Hub melalui AMQP, dan kemudian mencoba untuk terhubung menggunakan AMQP melalui WebSocket. Ketika itu gagal, agen IoT Edge keluar.

Contoh log edgeAgent:

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...

Penyebab

Konfigurasi jaringan pada jaringan host mencegah agen IoT Edge menjangkau jaringan. Agen mencoba untuk terhubung melalui AMQP (port 5671) terlebih dahulu. Jika koneksi gagal, ia mencoba WebSockets (port 443).

Runtime IoT Edge menyiapkan jaringan untuk setiap modul untuk berkomunikasi. Pada Linux, jaringan ini adalah jaringan jembatan. Pada Windows, ia menggunakan NAT. Masalah ini lebih umum terjadi pada perangkat Windows menggunakan kontainer Windows yang menggunakan jaringan NAT.

Solusi

Pastikan bahwa ada rute ke internet untuk alamat IP yang ditetapkan ke jaringan bridge/NAT ini. Terkadang konfigurasi VPN pada host menimpa jaringan IoT Edge.

Modul Edge Agent terus melaporkan 'file konfigurasi kosong' dan tidak ada modul yang dimulai pada perangkat

Gejala

  • Perangkat mengalami kesulitan memulai modul yang ditentukan di penyebaran. Hanya edgeAgent yang berjalan tetapi dan melaporkan file konfigurasi kosong....

  • Saat Anda berjalan sudo iotedge check di perangkat, ia melaporkan mesin Kontainer tidak dikonfigurasi dengan pengaturan server DNS, yang dapat memengaruhi konektivitas ke IoT Hub. Silakan lihat https://aka.ms/iotedge-prod-checklist-dns untuk praktik terbaik.

Penyebab

  • Secara default, IoT Edge memulai modul dalam jaringan kontainer terisolasi sendiri. Perangkat mungkin mengalami masalah dengan resolusi nama DNS dalam jaringan privat ini.
  • Jika menggunakan penginstalan snap IoT Edge, file konfigurasi Docker adalah lokasi yang berbeda. Lihat opsi solusi 3.

Solusi

Pilihan 1: Mengatur server DNS di pengaturan mesin kontainer

Tentukan server DNS untuk lingkungan Anda di pengaturan mesin kontainer, yang berlaku untuk semua modul kontainer yang dimulai oleh mesin. Buat file bernama daemon.json, lalu tentukan server DNS yang akan digunakan. Contohnya:

{
    "dns": ["1.1.1.1"]
}

Server DNS ini diatur ke layanan DNS yang dapat diakses publik. Namun beberapa jaringan, seperti jaringan perusahaan, memiliki server DNS mereka sendiri yang terinstal dan tidak akan mengizinkan akses ke server DNS publik. Oleh karena itu, jika perangkat edge Anda tidak dapat mengakses server DNS publik, ganti dengan alamat server DNS yang dapat diakses.

Tempatkan daemon.json di direktori /etc/docker pada perangkat Anda.

Jika lokasi sudah berisi file daemon.json, tambahkan kunci dns ke sana dan simpan file.

Mulai ulang mesin kontainer agar pembaruan berdampak.

sudo systemctl restart docker

Pilihan 2: Mengatur server DNS di penyebaran IoT Edge per modul

Anda dapat mengatur server DNS untuk setiap createOptions modul di penyebaran IoT Edge. Contohnya:

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

Peringatan

Jika Anda menggunakan metode ini dan menentukan alamat DNS yang salah, edgeAgent kehilangan koneksi dengan IoT Hub dan tidak dapat menerima penyebaran baru untuk memperbaiki masalah. Untuk mengatasi masalah ini, Anda dapat menginstal ulang runtime IoT Edge. Sebelum Anda menginstal instans baru IoT Edge, pastikan untuk menghapus kontainer edgeAgent apa pun dari penginstalan sebelumnya.

Pastikan untuk mengatur konfigurasi ini untuk modul edgeAgent dan edgeHub juga.

Opsi 3: Lewati lokasi file konfigurasi docker untuk memeriksa perintah

Jika IoT Edge diinstal sebagai snap, gunakan --container-engine-config-file parameter untuk menentukan lokasi file konfigurasi Docker. Misalnya, jika file konfigurasi Docker terletak di /var/snap/docker/current/config/daemon.json, jalankan perintah berikut: iotedge check --container-engine-config-file '/var/snap/docker/current/config/daemon.json'.

Saat ini, pesan peringatan terus muncul dalam output pemeriksaan iotedge bahkan setelah Anda mengatur lokasi file konfigurasi. Periksa laporan kesalahan karena snap IoT Edge tidak memiliki akses baca ke snap Docker. Jika Anda menggunakan pemeriksaan iotedge dalam proses rilis, Anda dapat menekan pesan peringatan dengan menggunakan --ignore container-engine-dns container-engine-logrotate parameter .

Modul Agen Edge dengan koneksi LTE melaporkan 'konfigurasi agen tepi kosong' dan menyebabkan 'kesalahan jaringan sementara'

Gejala

Perangkat yang dikonfigurasi dengan koneksi LTE mengalami masalah saat memulai modul yang ditentukan dalam penyebaran. EdgeAgent tidak dapat tersambung ke IoT Hub dan melaporkan konfigurasi agen tepi kosong dan kesalahan jaringan sementara terjadi.

Penyebab

Beberapa jaringan memiliki overhead paket, yang membuat MTU jaringan docker default (1500) terlalu tinggi dan menyebabkan fragmentasi paket mencegah akses ke sumber daya eksternal.

Solusi

  1. Periksa pengaturan MTU untuk jaringan docker Anda.

    docker network inspect <network name>

  2. Periksa pengaturan MTU untuk adaptor jaringan fisik di perangkat Anda.

    ip addr show eth0

Catatan

MTU untuk jaringan docker tidak boleh lebih tinggi dari MTU untuk perangkat Anda. Hubungi ISP Anda untuk informasi selengkapnya.

Jika Anda melihat ukuran MTU yang berbeda untuk jaringan docker dan perangkat, coba solusi berikut:

  1. Buat jaringan baru. Contohnya,

    docker network create --opt com.docker.network.driver.mtu=1430 test-mtu

    Dalam contoh, pengaturan MTU untuk perangkat adalah 1430. Oleh karena itu, MTU untuk jaringan Docker diatur ke 1430.

  2. Hentikan dan hapus jaringan Azure.

    docker network rm azure-iot-edge

  3. Buat ulang jaringan Azure.

    docker network create --opt com.docker.network.driver.mtu=1430 azure-iot-edge

  4. Hapus semua kontainer dan mulai ulang layanan bermata aziot.

    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

Agen IoT Edge tidak dapat mengakses gambar modul (403)

Gejala

Kontainer gagal dijalankan, dan log edgeAgent melaporkan kesalahan 403.

Penyebab

Modul agen IoT Edge tidak memiliki izin untuk mengakses gambar modul.

Solusi

Pastikan kredensial registri kontainer Anda benar manifes penyebaran perangkat Anda.

Agen IoT Edge melakukan panggilan identitas yang berlebihan

Gejala

Agen IoT Edge melakukan panggilan identitas berlebihan ke Azure IoT Hub.

Penyebab

Kesalahan konfigurasi manifes penyebaran perangkat menyebabkan penyebaran yang gagal pada perangkat. Logika coba lagi Agen IoT Edge terus mencoba kembali penyebaran. Setiap coba lagi melakukan panggilan identitas hingga penyebaran berhasil. Misalnya, jika manifes penyebaran menentukan URI modul yang tidak ada di registri kontainer atau salah ketik, agen IoT Edge mencoba kembali penyebaran hingga manifes penyebaran dikoreksi.

Solusi

Verifikasi manifes penyebaran di portal Azure. Koreksi kesalahan apa pun dan sebarkan ulang manifes ke perangkat.

Hub IoT Edge gagal memulai

Gejala

Modul edgeHub gagal memulai. Anda mungkin melihat pesan seperti salah satu kesalahan berikut dalam log:

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)

Atau

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)

Penyebab

Beberapa proses lain pada komputer host telah mengikat port yang coba diikat oleh modul edgeHub. Hub IoT Edge memetakan port 443, 5671, dan 8883 untuk digunakan dalam skenario gateway. Modul gagal memulai jika proses lain telah mengikat salah satu port tersebut.

Solusi

Anda dapat menyelesaikan masalah ini dengan dua cara:

Jika perangkat IoT Edge berfungsi sebagai perangkat gateway, maka Anda perlu menemukan dan menghentikan proses yang menggunakan port 443, 5671, atau 8883. Kesalahan untuk port 443 biasanya berarti proses lainnya merupakan server web.

Jika Anda tidak perlu menggunakan perangkat IoT Edge sebagai gateway, maka Anda dapat menghapus pengikatan port dari pilihan pembuatan modul edgeHub. Anda dapat mengubah pilihan pembuatan di portal Azure atau langsung di file deployment.json.

Di portal Microsoft Azure:

  1. Navigasi ke hub IoT Anda dan pilih Perangkat di bawah menu Manajemen perangkat .

  2. Pilih perangkat IoT Edge yang ingin Anda perbarui.

  3. Pilih Atur Modul.

  4. Pilih Pengaturan Runtime.

  5. Di pengaturan modul Azure Stack Edge Hub, hapus semuanya dari kotak teks Opsi Buat Kontainer.

  6. Pilih Terapkan untuk menyimpan perubahan Anda dan membuat penyebaran.

Di file deployment.json:

  1. Buka file deployment.json yang Anda terapkan ke perangkat IoT Edge Anda.

  2. Temukan pengaturan edgeHub di bagian properti yang diinginkan edgeAgent:

      "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"
       }
    
  3. Hapus baris createOptions, dan koma yang mengikuti pada akhir baris image sebelumnya:

      "edgeHub": {
          "restartPolicy": "always",
          "settings": {
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
          "status": "running",
          "type": "docker"
    }
    
  4. Pilih Buat untuk menerapkannya ke perangkat IoT Edge Anda lagi.

Modul IoT Edge gagal mengirim pesan ke edgeHub dengan kesalahan 404

Gejala

Modul IoT Edge kustom gagal mengirim pesan ke hub IoT Edge dengan kesalahan Module not found 404. Runtime IoT Edge mencetak pesan berikut ke log:

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 )

Penyebab

Runtime IoT Edge memberlakukan identifikasi proses untuk semua modul yang terhubung ke edgeHub karena alasan keamanan. Ia memverifikasi semua pesan yang dikirim oleh modul berasal dari ID proses utama modul. Jika pesan dikirim oleh modul dari ID proses yang berbeda dari yang awalnya ditetapkan, pesan akan ditolak dengan pesan kesalahan 404.

Solusi

Pada versi 1.0.7, semua proses modul diizinkan untuk terhubung. Untuk informasi selengkapnya, lihat log perubahan rilis 1.0.7.

Jika peningkatan ke 1.0.7 tidak dimungkinkan, selesaikan langkah-langkah berikut. Pastikan ID proses yang sama selalu digunakan oleh modul IoT Edge kustom untuk mengirim pesan ke edgeHub. Untuk instans, pastikan untuk menjalankan ENTRYPOINT daripada perintah CMD di file Docker Anda. Perintah CMD mengarah ke satu ID proses untuk modul dan ID proses lainnya untuk perintah bash yang menjalankan program utama, tetapi ENTRYPOINT mengarah ke satu ID proses.

Masalah stabilitas pada perangkat yang lebih kecil

Gejala

Anda mungkin mengalami masalah stabilitas pada perangkat yang dibatasi sumber daya seperti Raspberry Pi, terutama saat digunakan sebagai gateway. Gejalanya mencakup pengecualian memori dalam modul hub IoT Edge, perangkat hilir gagal terhubung, atau perangkat gagal mengirim pesan telemetri setelah beberapa jam.

Penyebab

Hub IoT Edge, yang merupakan bagian dari runtime IoT Edge, dioptimalkan untuk kinerja secara default dan mencoba mengalokasikan gugus memori yang besar. Pengoptimalan ini tidak ideal untuk perangkat edge yang dibatasi dan dapat menyebabkan masalah stabilitas.

Solusi

Untuk hub IoT Edge, atur variabel lingkungan OptimizeForPerformance ke false. Ada dua cara untuk mengatur variabel lingkungan:

Di portal Microsoft Azure:

  1. Di IoT Hub Anda, pilih perangkat IoT Edge Anda dan dari halaman detail perangkat lalu pilih Atur Modul>Pengaturan Runtime.

  2. Buat variabel lingkungan untuk modul hub IoT Edge yang disebut OptimizeForPerformance dengan jenis True/False yang diatur ke False.

  3. Pilih Terapkan untuk menyimpan perubahan, lalu pilih Tinjau + buat.

    Variabel lingkungan sekarang berada di edgeHub properti manifes penyebaran:

       "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"
       }
    
  4. Pilih Buat untuk menyimpan perubahan Anda dan menyebarkan modul.

Daemon keamanan tidak berhasil dimulai

Gejala

Daemon keamanan gagal dimulai dan kontainer modul tidak dibuat. Modul edgeAgentkustom , edgeHub dan lainnya tidak dimulai oleh layanan IoT Edge. Dalam aziot-edged log, Anda akan melihat kesalahan ini:

  • Daemon tidak berhasil memulai: Tidak dapat memulai layanan manajemen
  • disebabkan oleh: Terjadi kesalahan untuk jalur /var/run/iotedge/mgmt.sock
  • disebabkan oleh: Izin ditolak (kesalahan os 13)

Penyebab

Untuk semua distro Linux kecuali CentOS 7, konfigurasi default IoT Edge adalah menggunakan systemd aktivasi soket. Kesalahan izin terjadi jika Anda mengubah file konfigurasi untuk tidak menggunakan aktivasi soket tetapi membiarkan URL sebagai /var/run/iotedge/*.sock, karena iotedge pengguna tidak dapat menulis untuk /var/run/iotedge berarti tidak dapat membuka kunci dan memasang soket itu sendiri.

Solusi

Anda tidak perlu menonaktifkan aktivasi soket pada distribusi tempat aktivasi soket didukung. Namun, jika Anda lebih suka tidak menggunakan aktivasi soket sama sekali, masukkan soket ke dalam /var/lib/iotedge/.

  1. Jalankan systemctl disable iotedge.socket iotedge.mgmt.socket untuk menonaktifkan unit soket sehingga systemd tidak memulainya secara tidak perlu
  2. Mengubah konfigurasi iotedge untuk digunakan /var/lib/iotedge/*.sock di kedua connect bagian dan listen
  3. Jika Anda sudah memiliki modul, modul tersebut memiliki dudukan lama /var/run/iotedge/*.sock , jadi docker rm -f modul tersebut.

Pembersihan antrean pesan lambat

Gejala

Antrean pesan tidak dibersihkan setelah pesan diproses. Antrean pesan tumbuh dari waktu ke waktu dan akhirnya menyebabkan runtime IoT Edge kehabisan memori.

Penyebab

Interval pembersihan pesan dikendalikan oleh pesan klien TTL (waktu hidup) dan variabel lingkungan EdgeHub MessageCleanupIntervalSecs . Nilai TTL pesan default adalah dua jam dan nilai MessageCleanupIntervalSecs default adalah 30 menit. Jika aplikasi Anda menggunakan nilai TTL yang lebih pendek dari default dan Anda tidak menyesuaikan nilai MessageCleanupIntervalSecs, pesan yang kedaluwarsa tidak akan dibersihkan hingga interval pembersihan berikutnya.

Solusi

Jika Anda mengubah nilai TTL untuk aplikasi Anda yang lebih pendek dari default, sesuaikan juga nilai MessageCleanupIntervalSecs . Nilai MessageCleanupIntervalSecs harus jauh lebih kecil dari nilai TTL terkecil yang digunakan klien. Misalnya, jika aplikasi klien menentukan TTL lima menit di header pesan, atur nilai MessageCleanupIntervalSecs menjadi satu menit. Pengaturan ini memastikan bahwa pesan dibersihkan dalam waktu enam (5 + 1) menit.

Untuk mengonfigurasi nilai MessageCleanupIntervalSecs , atur variabel lingkungan dalam manifes penyebaran untuk modul hub IoT Edge. Untuk informasi selengkapnya tentang mengatur variabel lingkungan runtime, lihat Agen Edge dan Variabel Lingkungan Azure Edge Hub.

Jaringan

Daemon keamanan IoT Edge gagal dengan nama host tidak valid

Gejala

Pencobaan untuk memeriksa log manajer keamanan IoT Edge gagal dan mencetak pesan berikut:

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

Penyebab

Runtime IoT Edge hanya dapat mendukung hostname yang lebih pendek dari 64 karakter. Komputer fisik biasanya tidak memiliki hostname yang panjang, tetapi masalah ini lebih umum terjadi pada komputer virtual. Hostname yang dihasilkan secara otomatis untuk komputer virtual Windows yang di-host di Azure, khususnya, cenderung panjang.

Solusi

Ketika Anda melihat kesalahan ini, Anda dapat menyelesaikannya dengan mengonfigurasikan nama DNS komputer virtual Anda, lalu mengatur nama DNS sebagai hostname di perintah penyiapan.

  1. Di portal Azure, buka halaman gambaran umum komputer virtual Anda.

  2. Buka panel konfigurasi dengan memilih tautan Tidak dikonfigurasi (jika komputer virtual Anda baru) atau pilih nama DNS Yang sudah ada di bawah Nama DNS Esensial>. Jika komputer virtual Anda sudah memiliki nama DNS yang dikonfigurasikan, Anda tidak perlu mengonfigurasikan yang baru.

  3. Berikan nilai untuk label nama DNS jika Anda belum memilikinya dan pilih Simpan.

  4. Salin nama DNS baru, yang harus dalam format:
    <DNSnamelabel>.<vmlocation.cloudapp.azure.com>.

  5. Pada perangkat IoT Edge Anda, buka file konfigurasi.

    sudo nano /etc/aziot/config.toml
    
  6. Ganti nilai hostname dengan nama DNS Anda.

  7. Simpan dan tutup file, lalu terapkan perubahan ke IoT Edge.

    sudo iotedge config apply
    

Modul IoT Edge melaporkan kesalahan konektivitas

Gejala

Modul IoT Edge yang terhubung langsung ke layanan cloud, termasuk modul runtime, berhenti bekerja seperti yang diharapkan dan mengembalikan kesalahan di sekitar kegagalan koneksi atau jaringan.

Penyebab

Kontainer mengandalkan penerusan paket IP untuk terhubung ke internet sehingga dapat berkomunikasi dengan layanan cloud. Penerusan paket IP diaktifkan secara default di Docker, tetapi jika dinonaktifkan, modul apa pun yang terhubung ke layanan cloud tidak akan berfungsi seperti yang diharapkan. Untuk informasi selengkapnya, lihat Memahami komunikasi kontainer di dokumentasi Docker.

Solusi

Gunakan langkah-langkah berikut untuk mengaktifkan penerusan paket IP.

  1. Buka file sysctl.conf.

    sudo nano /etc/sysctl.conf
    
  2. Tambahkan baris berikut ke file.

    net.ipv4.ip_forward=1
    
  3. Simpan dan tutup file.

  4. Mulai ulang layanan jaringan dan layanan buruh pelabuhan untuk menerapkan perubahan.

IoT Edge di balik gateway tidak dapat melakukan permintaan HTTP dan memulai modul edgeAgent

Gejala

Runtime IoT Edge aktif dengan file konfigurasi yang valid, tetapi tidak dapat memulai modul edgeAgent . Perintah iotedge list menampilkan daftar kosong. Runtime IoT Edge melaporkan Could not perform HTTP request dalam log.

Penyebab

Perangkat IoT Edge di balik gateway mendapatkan gambar modul dari perangkat induk IoT Edge yang ditentukan di bidang parent_hostname dari file konfigurasi. Kesalahan Could not perform HTTP request berarti bahwa perangkat hilir tidak dapat menjangkau perangkat induknya melalui HTTP.

Solusi

Pastikan perangkat IoT Edge induk dapat menerima permintaan masuk dari perangkat IoT Edge hilir. Buka lalu lintas jaringan pada port 443 dan 6617 untuk permintaan yang berasal dari perangkat hilir.

IoT Edge di balik gateway tidak dapat melakukan permintaan HTTP dan memulai modul edgeAgent

Gejala

Daemon IoT Edge aktif dengan file konfigurasi yang valid, tetapi tidak dapat memulai modul edgeAgent. Perintah iotedge list menampilkan daftar kosong. Log daemon IoT Edge melaporkan Could not perform HTTP request.

Penyebab

Perangkat IoT Edge di balik gateway mendapatkan gambar modul dari perangkat induk IoT Edge yang ditentukan di bidang parent_hostname dari file konfigurasi. Kesalahan Could not perform HTTP request berarti bahwa perangkat hilir tidak dapat menjangkau perangkat induknya melalui HTTP.

Solusi

Pastikan perangkat IoT Edge induk dapat menerima permintaan masuk dari perangkat IoT Edge hilir. Buka lalu lintas jaringan pada port 443 dan 6617 untuk permintaan yang berasal dari perangkat hilir.

IoT Edge di belakang gateway tidak dapat tersambung saat bermigrasi dari satu hub IoT ke hub IoT lainnya

Gejala

Saat mencoba memigrasikan hierarki perangkat IoT Edge dari satu hub IoT ke hub IoT lainnya, perangkat IoT Edge induk tingkat atas dapat terhubung ke IoT Hub, tetapi perangkat IoT Edge hilir tidak dapat. Laporan Unable to authenticate client downstream-device/$edgeAgent with module credentialslog .

Penyebab

Kredensial untuk perangkat hilir tidak diperbarui dengan benar saat migrasi ke hub IoT baru terjadi. Karena itu, edgeAgent dan edgeHub modul diatur untuk memiliki jenis none autentikasi (default jika tidak diatur secara eksplisit). Selama koneksi, modul pada perangkat hilir menggunakan kredensial lama, menyebabkan autentikasi gagal.

Solusi

Saat bermigrasi ke hub IoT baru (dengan asumsi tidak menggunakan DPS), ikuti langkah-langkah berikut secara berurutan:

  1. Ikuti panduan ini untuk mengekspor lalu mengimpor identitas perangkat dari hub IoT lama ke yang baru
  2. Mengonfigurasi ulang semua penyebaran dan konfigurasi IoT Edge di hub IoT baru
  3. Mengonfigurasi ulang semua hubungan perangkat induk-anak di hub IoT baru
  4. Perbarui setiap perangkat untuk menunjuk ke nama host hub IoT baru (iothub_hostname di bawah [provisioning] di config.toml)
  5. Jika Anda memilih untuk mengecualikan kunci autentikasi selama ekspor perangkat, konfigurasi ulang setiap perangkat dengan kunci baru yang diberikan oleh hub IoT baru (device_id_pk di config.tomlbawah [provisioning.authentication] )
  6. Mulai ulang perangkat Edge induk tingkat atas terlebih dahulu, pastikan perangkat sudah aktif dan berjalan
  7. Mulai ulang setiap perangkat dalam tingkat hierarki berdasarkan tingkat dari atas ke bawah

IoT Edge memiliki throughput pesan rendah saat jauh secara geografis dari IoT Hub

Gejala

Perangkat Azure IoT Edge yang secara geografis jauh dari Azure IoT Hub memiliki throughput pesan yang lebih rendah dari yang diharapkan.

Penyebab

Latensi tinggi antara perangkat dan IoT Hub dapat menyebabkan throughput pesan yang lebih rendah dari yang diharapkan. IoT Edge menggunakan ukuran batch pesan default 10. Ini membatasi jumlah pesan yang dikirim dalam satu batch, yang meningkatkan jumlah perjalanan pulang pergi antara perangkat dan IoT Hub.

Solusi

Coba tingkatkan variabel lingkungan IoT Edge Hub MaxUpstreamBatchSize . Ini memungkinkan lebih banyak pesan dikirim dalam satu batch, yang mengurangi jumlah perjalanan pulang pergi antara perangkat dan IoT Hub.

Untuk mengatur variabel lingkungan Azure Edge Hub di portal Azure:

  1. Navigasi ke IoT Hub Anda dan pilih Perangkat di bawah menu Manajemen perangkat.
  2. Pilih perangkat IoT Edge yang ingin Anda perbarui.
  3. Pilih Atur Modul.
  4. Pilih Pengaturan Runtime.
  5. Di tab Pengaturan modul Edge Hub , tambahkan variabel lingkungan MaxUpstreamBatchSize sebagai jenis Angka dengan nilai 20.
  6. Pilih Terapkan.

Langkah berikutnya

Apakah Anda menemukan bug di platform Azure IoT Edge? Kirim masalah agar kami dapat terus melakukan peningkatkan.

Jika Anda punya pertanyaan lebih lanjut, buat Permintaan dukungan untuk bantuan.