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: IoT Edge 1.5 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
Periksa pengaturan MTU untuk jaringan docker Anda.
docker network inspect <network name>
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:
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.
Hentikan dan hapus jaringan Azure.
docker network rm azure-iot-edge
Buat ulang jaringan Azure.
docker network create --opt com.docker.network.driver.mtu=1430 azure-iot-edge
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:
Navigasi ke hub IoT Anda dan pilih Perangkat di bawah menu Manajemen perangkat .
Pilih perangkat IoT Edge yang ingin Anda perbarui.
Pilih Atur Modul.
Pilih Pengaturan Runtime.
Di pengaturan modul Azure Stack Edge Hub, hapus semuanya dari kotak teks Opsi Buat Kontainer.
Pilih Terapkan untuk menyimpan perubahan Anda dan membuat penyebaran.
Di file deployment.json:
Buka file deployment.json yang Anda terapkan ke perangkat IoT Edge Anda.
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" }
Hapus baris
createOptions
, dan koma yang mengikuti pada akhir barisimage
sebelumnya:"edgeHub": { "restartPolicy": "always", "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5", "status": "running", "type": "docker" }
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:
Di IoT Hub Anda, pilih perangkat IoT Edge Anda dan dari halaman detail perangkat lalu pilih Atur Modul>Pengaturan Runtime.
Buat variabel lingkungan untuk modul hub IoT Edge yang disebut OptimizeForPerformance dengan jenis True/False yang diatur ke False.
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" }
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 edgeAgent
kustom , 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/
.
- Jalankan
systemctl disable iotedge.socket iotedge.mgmt.socket
untuk menonaktifkan unit soket sehingga systemd tidak memulainya secara tidak perlu - Mengubah konfigurasi iotedge untuk digunakan
/var/lib/iotedge/*.sock
di keduaconnect
bagian danlisten
- Jika Anda sudah memiliki modul, modul tersebut memiliki dudukan lama
/var/run/iotedge/*.sock
, jadidocker 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.
Di portal Azure, buka halaman gambaran umum komputer virtual Anda.
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.
Berikan nilai untuk label nama DNS jika Anda belum memilikinya dan pilih Simpan.
Salin nama DNS baru, yang harus dalam format:
<DNSnamelabel>.<vmlocation.cloudapp.azure.com>.Pada perangkat IoT Edge Anda, buka file konfigurasi.
sudo nano /etc/aziot/config.toml
Ganti nilai
hostname
dengan nama DNS Anda.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.
Buka file sysctl.conf.
sudo nano /etc/sysctl.conf
Tambahkan baris berikut ke file.
net.ipv4.ip_forward=1
Simpan dan tutup file.
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 credentials
log .
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:
- Ikuti panduan ini untuk mengekspor lalu mengimpor identitas perangkat dari hub IoT lama ke yang baru
- Mengonfigurasi ulang semua penyebaran dan konfigurasi IoT Edge di hub IoT baru
- Mengonfigurasi ulang semua hubungan perangkat induk-anak di hub IoT baru
- Perbarui setiap perangkat untuk menunjuk ke nama host hub IoT baru (
iothub_hostname
di bawah[provisioning]
diconfig.toml
) - 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
diconfig.toml
bawah[provisioning.authentication]
) - Mulai ulang perangkat Edge induk tingkat atas terlebih dahulu, pastikan perangkat sudah aktif dan berjalan
- 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:
- Navigasi ke IoT Hub Anda dan pilih Perangkat di bawah menu Manajemen perangkat.
- Pilih perangkat IoT Edge yang ingin Anda perbarui.
- Pilih Atur Modul.
- Pilih Pengaturan Runtime.
- Di tab Pengaturan modul Edge Hub , tambahkan variabel lingkungan MaxUpstreamBatchSize sebagai jenis Angka dengan nilai 20.
- 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.