Masalah dan resolusi umum untuk Azure IoT Edge

Berlaku untuk ikon:yes IoT Edge 1.1 Versi lain: IoT Edge 1.2, IoT Edge 1.3

Berlaku untuktanda centang:IoT Edge 1.2 IoT Edge 1.2 IoT Edge 1.3 IoT Edge 1.3 Versi lain:IoT Edge 1.1

Gunakan artikel ini untuk menemukan langkah-langkah untuk menyelesaikan masalah umum yang mungkin Anda alami saat menyebarkan solusi IoT Edge. Jika Anda perlu mempelajari cara menemukan log dan kesalahan dari perangkat IoT Edge Anda, lihat Memecahkan masalah perangkat IoT Edge Anda.

Agen IoT Edge berhenti setelah sekitar satu menit

Perilaku yang diamati:

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

Akar masalah:

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.

Resolusi:

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

Agen IoT Edge tidak dapat mengakses gambar modul (403)

Perilaku yang diamati:

Kontainer gagal dijalankan, dan log edgeAgent menunjukkan kesalahan 403.

Akar masalah:

Agen IoT Edge tidak memiliki izin untuk mengakses gambar modul.

Resolusi:

Pastikan kredensial registri Anda ditentukan dengan benar dalam manifes penyebaran Anda.

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

Perilaku yang diamati:

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

Akar masalah:

Secara default, IoT Edge memulai modul dalam jaringan kontainer terisolasi sendiri. Perangkat mungkin mengalami masalah dengan resolusi nama DNS dalam jaringan privat ini.

Resolusi:

Pilihan 1: Mengatur server DNS di pengaturan mesin kontainer

Tentukan server DNS untuk lingkungan Anda di pengaturan mesin kontainer, yang akan 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 lokasi yang tepat untuk platform Anda:

Platform Lokasi
Linux /etc/docker
Host Windows dengan kontainer Windows C:\ProgramData\iotedge-moby\config

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

Mulai ulang mesin kontainer agar pembaruan berdampak.

Platform Perintah
Linux sudo systemctl restart docker
Windows (Admin PowerShell) Restart-Service iotedge-moby -Force

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.

Tidak dapat memulai modul karena ketidakcocokan OS

Perilaku yang diamati:

Modul edgeHub gagal dimulai di IoT Edge versi 1.1.

Akar masalah:

Modul Windows menggunakan versi Windows yang tidak kompatibel dengan versi Windows pada host. IoT Edge Windows versi 1809 build 17763 diperlukan sebagai lapisan dasar untuk gambar modul, tetapi versi yang berbeda sedang digunakan.

Resolusi:

Periksa versi berbagai sistem operasi Windows Anda di Memecahkan masalah ketidakcocokan host dan gambar kontainer. Jika sistem operasi berbeda, perbarui untuk IoT Edge Windows versi 1809 build 17763 dan bangun kembali gambar Docker yang digunakan untuk modul tersebut.

Hub IoT Edge gagal memulai

Perilaku yang diamati:

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)

Akar masalah:

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.

Resolusi:

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 Azure:

  1. Arahkan ke hub IoT Anda dan pilih IoT Edge.

  2. Pilih perangkat IoT Edge yang ingin Anda perbarui.

  3. Pilih Atur Modul.

  4. Pilih Pengaturan Runtime.

  5. Di pengaturan modul Edge Hub, hapus semuanya dari kotak teks Buat Pilihan.

  6. Simpan perubahan Anda dan buat 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": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  3. Hapus baris createOptions, dan koma yang mengikuti pada akhir baris image sebelumnya:

    "edgeHub": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  4. Simpan file dan terapkan ke perangkat IoT Edge Anda lagi.

Daemon keamanan IoT Edge gagal dengan nama host tidak valid

Perilaku yang diamati:

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

Akar masalah:

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.

Resolusi:

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. Pilih konfigurasikan di bawah nama DNS. Jika komputer virtual Anda sudah memiliki nama DNS yang dikonfigurasikan, Anda tidak perlu mengonfigurasikan yang baru.

    Mengonfigurasikan nama DNS komputer virtual

  3. Berikan nilai untuk Label nama DNS dan pilih Simpan.

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

  5. Di dalam komputer virtual, gunakan perintah berikut untuk mengatur runtime IoT Edge dengan nama DNS Anda:

    • Pada Linux:

      sudo nano /etc/iotedge/config.yaml
      
    • Pada Windows:

      notepad C:\ProgramData\iotedge\config.yaml
      
  1. Di portal Azure, buka halaman gambaran umum komputer virtual Anda.

  2. Pilih konfigurasikan di bawah nama DNS. Jika komputer virtual Anda sudah memiliki nama DNS yang dikonfigurasikan, Anda tidak perlu mengonfigurasikan yang baru.

    Mengonfigurasikan nama DNS komputer virtual

  3. Berikan nilai untuk Label nama DNS 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
    

Tidak dapat mendapatkan log daemon IoT Edge pada Windows

Perilaku yang diamati:

Anda mendapatkan EventLogException saat menggunakan Get-WinEvent pada Windows.

Akar masalah:

Perintah PowerShell Get-WinEvent bergantung pada entri registri yang dihadirkan untuk menemukan log dengan ProviderName tertentu.

Resolusi:

Atur entri registri untuk daemon IoT Edge. Buat file iotedge.reg dengan konten berikut ini, dan impor ke Registri Windows dengan mengeklik ganda atau menggunakan perintah reg import iotedge.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\iotedged]
"CustomSource"=dword:00000001
"EventMessageFile"="C:\\ProgramData\\iotedge\\iotedged.exe"
"TypesSupported"=dword:00000007

Kesalahan klien DPS

Perilaku yang diamati:

IoT Edge gagal memulai dengan pesan kesalahanfailed to provision with IoT Hub, and no valid device backup was found dps client error.

Akar masalah:

Pendaftaran grup digunakan untuk memprovisikan perangkat IoT Edge ke IoT Hub. Perangkat IoT Edge dipindahkan ke hub yang berbeda. Pendaftaran dihapus di DPS. Pendaftaran baru dibuat di DPS untuk hub baru. Perangkat tidak disediakan ulang.

Resolusi:

  1. Verifikasi kredensial DPS Anda sudah benar.
  2. Terapkan konfigurasi Anda menggunakan sudo iotedge apply config.
  3. Jika perangkat tidak disediakan ulang, mulai ulang perangkat menggunakan sudo iotedge system restart.
  4. Jika perangkat tidak disediakan ulang, paksa provisi ulang menggunakan sudo iotedge system reprovision.

Untuk memprovisi ulang secara otomatis, atur dynamic_reprovisioning: true dalam file konfigurasi perangkat. Mengatur bendera ini ke keikutsertaan true ke fitur provisi ulang dinamis. IoT Edge mendeteksi situasi di mana perangkat tampaknya telah disediakan ulang di cloud dengan memantau koneksi IoT Hub sendiri untuk kesalahan tertentu. IoT Edge merespons dengan mematikan dirinya sendiri dan semua modul Edge tidak berfungsi. Saat daemon dimulai lagi, daemon akan mencoba memprovisikan ulang perangkat ini dengan Azure untuk menerima informasi provisi IoT Hub baru.

Saat menggunakan provisi eksternal, daemon juga akan memberi tahu titik akhir provisi eksternal tentang peristiwa provisi ulang sebelum mematikan. Untuk informasi selengkapnya, lihat konsep provisi ulang perangkat IoT Hub.

Masalah stabilitas pada perangkat yang lebih kecil

Perilaku yang diamati:

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.

Akar masalah:

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.

Resolusi:

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

Di portal 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 yang diatur ke false.

OptimizeForPerformance diatur ke false

Di manifes penyebaran:

"edgeHub": {
  "type": "docker",
  "settings": {
    "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
    "createOptions": <snipped>
  },
  "env": {
    "OptimizeForPerformance": {
      "value": "false"
    }
  },

Modul IoT Edge gagal mengirim pesan ke edgeHub dengan kesalahan 404

Perilaku yang diamati:

Modul IoT Edge kustom gagal mengirim pesan ke hub IoT Edge dengan kesalahan Module not found 404. Daemon 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 )

Akar masalah:

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

Resolusi:

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.

Modul IoT Edge berhasil menyebarkan dan kemudian menghilang dari perangkat

Perilaku yang diamati:

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.

Akar masalah:

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

Resolusi:

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

Modul IoT Edge melaporkan kesalahan konektivitas

Perilaku yang diamati:

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.

Akar masalah:

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 maka modul apa pun yang terhubung ke layanan cloud tidak akan berfungsi seperti yang diharapkan. Untuk informasi selengkapnya, lihat Memahami komunikasi kontainer di dokumentasi Docker.

Resolusi:

Gunakan langkah-langkah berikut untuk mengaktifkan penerusan paket IP.

Di Windows:

  1. Buka aplikasi Run.

  2. Masukkan regedit di kotak teks dan pilih Oke.

  3. Di jendela Registry Editor, ramban ke HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.

  4. Carilah parameter IPEnableRouter.

    1. Jika parameter ada, setel nilai parameter ke 1.

    2. Jika parameter tidak ada, tambahkan sebagai parameter baru dengan pengaturan berikut:

      Pengaturan Nilai
      Nama IPEnableRouter
      Jenis REG_DWORD
      Nilai 1
  5. Tutup jendela editor registri.

  6. Mulai ulang sistem Anda untuk menerapkan perubahan.

Di Linux:

  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

Perilaku yang diamati:

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.

Akar masalah:

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 perangkat anak tidak dapat menjangkau perangkat induknya melalui HTTP.

Resolusi:

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

IoT Edge yang berada di belakang gateway tidak dapat terhubung saat bermigrasi dari satu hub IoT ke hub IoT lainnya

Perilaku yang diamati:

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 .

Akar masalah:

Info masuk untuk perangkat hilir tidak diperbarui dengan benar ketika 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.

Resolusi:

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] )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 menurut tingkat dari atas ke bawah

Daemon keamanan tidak berhasil dimulai

Perilaku yang diamati:

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 path /var/run/iotedge/mgmt.sock
  • disebabkan oleh: Izin ditolak (kesalahan os 13)

Akar masalah:

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.

Resolusi:

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

  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 bagian connect dan listen
  3. Jika Anda sudah memiliki modul, modul tersebut memiliki dudukan lama /var/run/iotedge/*.sock , jadi docker rm -f modul tersebut.

Langkah berikutnya

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

Jika Anda memiliki pertanyaan lain, buat Permintaan dukungan untuk bantuan.