Memahami dan mengatasi kesalahan Azure IoT Hub

Artikel ini menjelaskan penyebab dan solusi untuk kode galat umum yang mungkin Anda alami saat menggunakan IoT Hub.

400027 Koneksi dengan paksa ditutup pada koneksi baru

Anda mungkin melihat kesalahan 400027 Koneksi forcefullyClosedOnNew Koneksi ion jika perangkat Anda terputus dan melaporkan Communication_Error sebagai Koneksi ionStatusChangeReason menggunakan jenis transportasi .NET SDK dan MQTT. Atau, operasi ganda perangkat ke cloud Anda (seperti membaca atau melakukan patch properti yang dilaporkan) atau pemanggilan metode langsung gagal dengan kode galat 400027.

Kesalahan ini terjadi saat klien lain membuat koneksi baru ke IoT Hub menggunakan identitas yang sama, sehingga IoT Hub menutup koneksi sebelumnya. IoT Hub tidak mengizinkan lebih dari satu klien untuk tersambung menggunakan identitas yang sama.

Untuk mengatasi kesalahan ini, pastikan bahwa setiap klien tersambung ke IoT Hub menggunakan identitasnya sendiri.

401003 IoT Hub tidak sah

Dalam log, Anda mungkin melihat pola perangkat yang terputus dengan 401003 IoTHubUnauthorized, diikuti oleh 404104 DeviceConnectionClosedRemotely, lalu berhasil tersambung segera setelahnya.

Atau, permintaan ke IoT Hub gagal dengan salah satu pesan kesalahan berikut:

  • Header otorisasi tidak ada
  • IotHub '*' tidak berisi perangkat yang ditentukan '*'
  • Aturan otorisasi '*' tidak mengizinkan akses untuk '*'
  • Autentikasi gagal untuk perangkat ini, perpanjang token atau sertifikat dan sambungkan ulang
  • Thumbprint tidak cocok dengan konfigurasi: Thumbprint: SHA1Hash=*, SHA2Hash=*; Konfigurasi: PrimaryThumbprint=*, SecondaryThumbprint=*
  • Perwakilanuser@example.com tidak berwenang untuk GET pada /exampleOperation karena tidak ada izin yang ditetapkan

Kesalahan ini terjadi karena, untuk MQTT, beberapa SDK mengandalkan IoT Hub untuk mengeluarkan pemutusan saat token SAS kedaluwarsa untuk mengetahui kapan harus me-refreshnya. Sehingga,

  1. Token SAS kedaluwarsa
  2. IoT Hub melihat kedaluwarsa, dan memutuskan perangkat dengan 401003 IoTHubUnauthorized
  3. Perangkat menyelesaikan pemutusan dengan 404104 DeviceConnectionClosedRemotely
  4. IoT SDK menghasilkan token SAS baru
  5. Perangkat berhasil tersambung kembali dengan IoT Hub

Atau, IoT Hub tidak dapat mengautentikasi header, aturan, atau kunci autentikasi. Ini bisa disebabkan oleh salah satu alasan yang dikutip dalam gejala.

Untuk mengatasi kesalahan ini, tidak diperlukan tindakan jika menggunakan IoT SDK untuk koneksi menggunakan string koneksi perangkat. IoT SDK meregenerasi token baru untuk tersambung kembali pada kedaluwarsa token SAS.

Umur token default adalah 60 menit di seluruh SDK; namun, untuk beberapa SDK umur token dan ambang batas perpanjangan token dapat dikonfigurasikan. Selain itu, kesalahan yang dihasilkan saat perangkat terputus dan koneksi kembali pada pembaruan token berbeda untuk setiap SDK. Untuk mempelajari selengkapnya, dan untuk informasi tentang cara menentukan SDK mana yang digunakan perangkat Anda dalam log, lihat Perilaku pemutusan perangkat MQTT dengan Azure IoT SDK.

Untuk pengembang perangkat, jika volume kesalahan menjadi perhatian, beralihlah ke C SDK, yang memperbarui token SAS sebelum kedaluwarsa. Untuk AMQP, token SAS dapat me-refresh tanpa pemutusan.

Secara umum, pesan kesalahan yang disajikan harus menjelaskan cara memperbaiki kesalahan. Jika karena alasan tertentu Anda tidak memiliki akses ke detail pesan kesalahan, pastikan:

  • SAS atau token keamanan lain yang Anda gunakan tidak kedaluwarsa.
  • Untuk autentikasi sertifikat X.509, sertifikat perangkat atau sertifikat CA yang terkait dengan perangkat tidak kedaluwarsa. Untuk mempelajari cara mendaftarkan sertifikat CA X.509 dengan IoT Hub, lihat Tutorial: Membuat dan mengunggah sertifikat untuk pengujian.
  • Untuk autentikasi cap jempol sertifikat X.509, cap jempol sertifikat perangkat terdaftar di IoT Hub.
  • Info masukl otorisasi dibentuk dengan baik untuk protokol yang Anda gunakan. Untuk mempelajari lebih lanjut, lihat Mengontrol akses ke IoT Hub.
  • Aturan otorisasi yang digunakan memiliki izin untuk operasi yang diminta.
  • Untuk pesan kesalahan terakhir yang dimulai dengan "utama...", kesalahan ini dapat diatasi dengan menetapkan tingkat izin RBAC Azure yang benar kepada pengguna. Misalnya, Pemilik di Hub IoT dapat menetapkan peran "Pemilik Data IoT Hub", yang memberikan semua izin. Cobalah peran ini untuk mengatasi kurangnya masalah izin.

Catatan

Beberapa perangkat mungkin mengalami masalah penyimpangan waktu ketika waktu perangkat memiliki perbedaan lebih dari lima menit dari server. Kesalahan ini dapat terjadi ketika perangkat telah terhubung ke hub IoT tanpa masalah selama berpekan-minggu atau bahkan berbulan-bulan tetapi kemudian mulai terus-menerus memiliki koneksinya ditolak. Kesalahan juga dapat spesifik untuk subset perangkat yang terhubung ke hub IoT, karena penyimpangan waktu dapat terjadi pada tingkat yang berbeda tergantung pada kapan perangkat pertama kali terhubung atau diaktifkan.

Seringkali, melakukan sinkronisasi waktu menggunakan NTP atau me-reboot perangkat (yang dapat secara otomatis melakukan sinkronisasi waktu selama urutan boot) memperbaiki masalah dan memungkinkan perangkat untuk terhubung lagi. Untuk menghindari kesalahan ini, konfigurasikan perangkat untuk melakukan sinkronisasi waktu berkala menggunakan NTP. Anda dapat menjadwalkan sinkronisasi untuk harian, mingguan, atau bulanan tergantung pada jumlah drift yang dialami perangkat. Jika Anda tidak dapat mengonfigurasi sinkronisasi NTP berkala di perangkat Anda, maka jadwalkan boot ulang berkala.

kuota IoT Hub 403002 terlampaui

Anda mungkin melihat permintaan ke IoT Hub gagal dengan kesalahan 403002 IoTHubQuotaExceeded. Dan di portal Azure, daftar perangkat hub IoT tidak dimuat.

Kesalahan ini biasanya terjadi ketika kuota pesan harian untuk IoT hub terlampaui. Untuk mengatasi kesalahan ini:

Kesalahan ini juga dapat dikembalikan oleh pekerjaan impor massal ketika jumlah perangkat yang terdaftar ke hub IoT Anda mendekati atau melebihi batas kuota untuk hub IoT. Untuk mempelajari lebih lanjut, lihat Memecahkan masalah pekerjaan impor.

kedalaman antrean maksimum perangkat 403004 terlampaui

Saat mencoba mengirim pesan cloud ke perangkat, Anda mungkin melihat bahwa permintaan gagal dengan kesalahan 403004 atau DeviceMaximumQueueDepthExceeded.

Penyebab utama kesalahan ini adalah jumlah pesan yang diantrekan untuk perangkat melebihi batas antrean.

Alasan paling mungkin Anda mengalami batas ini adalah karena Anda menggunakan HTTPS untuk menerima pesan, yang mengarah ke polling berkelanjutan menggunakan ReceiveAsync, mengakibatkan IoT Hub mencekik permintaan.

Pola yang didukung untuk pesan cloud-to-device dengan HTTPS adalah perangkat yang terhubung terputus-putus yang jarang memeriksa pesan (kurang dari setiap 25 menit). Untuk mengurangi kemungkinan masuk ke batas antrean, beralihlah ke AMQP atau MQTT untuk pesan cloud-to-device.

Atau, tingkatkan logika sisi perangkat untuk menyelesaikan, menolak, atau meninggalkan pesan yang diantrekan secara cepat, mempersingkat waktu untuk hidup, atau mempertimbangkan untuk mengirim lebih sedikit pesan. Lihat waktu pesan C2D untuk aktif.

Terakhir, pertimbangkan untuk menggunakan Purge Queue API untuk membersihkan pesan yang tertunda secara berkala sebelum batas tercapai.

batas unggahan file aktif maksimum perangkat 403006 terlampaui

Anda mungkin melihat bahwa permintaan pengunggahan file Anda gagal dengan kode kesalahan 403006 DeviceMaximumActiveFileUploadLimitExceeded dan pesan "Jumlah permintaan pengunggahan file aktif tidak boleh melebihi 10".

Kesalahan ini terjadi karena setiap klien perangkat dibatasi untuk pengunggahan file secara bersamaan. Anda dapat dengan mudah melebihi batas jika perangkat tidak memberi tahu IoT Hub saat pengunggahan file selesai. Masalah ini umumnya disebabkan oleh jaringan samping perangkat yang tidak dapat diandalkan.

Untuk mengatasi kesalahan ini, pastikan perangkat dapat segera memberi tahu penyelesaian pengunggahan file IoT Hub. Kemudian, coba kurangi TTL token SAS untuk konfigurasi pengunggahan file.

Perangkat 404001 tidak ditemukan

Selama komunikasi cloud ke perangkat (C2D), seperti pesan C2D, pembaruan ganda, atau metode langsung, Anda mungkin melihat bahwa operasi gagal dengan kesalahan 404001 DeviceNotFound.

Operasi gagal karena IoT Hub tidak dapat menemukan perangkat. Perangkat tidak terdaftar atau dinonaktifkan.

Untuk mengatasi kesalahan ini, daftarkan ID perangkat yang Anda gunakan, lalu coba lagi.

Perangkat 404103 tidak online

Anda mungkin melihat bahwa metode langsung ke perangkat gagal dengan kesalahan 404103 DeviceNotOnline meskipun perangkat sedang online.

Jika Anda mengetahui bahwa perangkat sedang online dan masih mendapatkan kesalahan, kemungkinan kesalahan tersebut terjadi karena panggilan balik metode langsung tidak terdaftar pada perangkat.

Untuk mengonfigurasi perangkat Anda dengan benar untuk panggilan balik metode langsung, lihat Menangani metode langsung pada perangkat.

koneksi perangkat 404104 ditutup dari jarak jauh

Anda mungkin melihat bahwa perangkat terputus secara berkala (setiap 65 menit, misalnya) dan Anda melihat 404104 DeviceConnectionClosedRemotely di log sumber daya IoT Hub. Terkadang, Anda juga melihat 401003 IoTHubUnauthorized dan peristiwa koneksi perangkat yang berhasil kurang dari satu menit kemudian.

Atau, perangkat terputus secara acak, dan Anda melihat 404104 DeviceConnectionClosedRemotely di log sumber daya IoT Hub.

Atau, banyak perangkat terputus sekaligus, Anda melihat penurunan dalam Metrik perangkat yang tersambung (connectedDeviceCount), dan ada lebih banyak 404104 DeviceConnectionClosedRemotely dan 500xxx Kesalahan internal di Azure Monitor Logs daripada biasanya.

Kesalahan ini dapat terjadi karena token SAS yang digunakan untuk tersambung ke IoT Hub kedaluwarsa, yang menyebabkan IoT Hub memutuskan sambungan perangkat. Koneksi dibuat ulang saat token di-refresh oleh perangkat. Misalnya, token SAS kedaluwarsa setiap jam secara default untuk C SDK, yang dapat menyebabkan pemutusan sambungan reguler. Untuk mempelajari selengkapnya, lihat 401003 IoTHubUnauthorized.

Beberapa kemungkinan lain termasuk:

  • Perangkat kehilangan konektivitas jaringan yang mendasarinya lebih lama dari tetap aktif MQTT, menghasilkan batas waktu menganggur jarak jauh. Pengaturan tetap aktif MQTT dapat berbeda per perangkat.
  • Perangkat mengirim reset tingkat TCP/IP tetapi tidak mengirim MQTT DISCONNECT tingkat aplikasi. Pada dasarnya, perangkat tiba-tiba menutup koneksi soket yang mendasarinya. Terkadang, masalah ini disebabkan oleh bug dalam versi Azure IoT SDK yang lebih lama.
  • Aplikasi sisi perangkat mengalami crash.

Atau, IoT Hub mungkin mengalami masalah sementara. Lihat kesalahan server internal IoT Hub.

Untuk mengatasi kesalahan ini:

  • Lihat panduan untuk kesalahan 401003 IoTHubUnauthorized.
  • Pastikan perangkat memiliki konektivitas yang baik ke IoT Hub dengan menguji koneksi. Jika jaringan tidak dapat diandalkan atau terputus-putus, kami tidak menyarankan untuk meningkatkan nilai tetap aktif karena dapat mengakibatkan deteksi (melalui pemberitahuan Azure Monitor, misalnya) membutuhkan waktu lebih lama.
  • Gunakan versi terbaru SDK IoT.
  • Lihat panduan untuk kesalahan server internal IoT Hub.

Sebaiknya gunakan SDK perangkat Azure IoT untuk mengelola koneksi dengan andal. Untuk mempelajari lebih lanjut, lihat Mengelola konektivitas dan pesan yang andal dengan menggunakan SDK perangkat Azure IoT Hub

Perangkat 409001 sudah ada

Saat mencoba mendaftarkan perangkat di IoT Hub, Anda mungkin melihat bahwa permintaan gagal dengan kesalahan 409001 DeviceAlreadyExists.

Kesalahan ini terjadi karena sudah ada perangkat dengan ID perangkat yang sama di hub IoT.

Untuk mengatasi kesalahan ini, gunakan ID perangkat yang berbeda dan coba lagi.

Anda mungkin melihat kesalahan 409002 LinkCreationConflict di log beserta pemutusan sambungan perangkat atau kegagalan pesan cloud ke perangkat.

Umumnya, kesalahan ini terjadi ketika IoT Hub mendeteksi klien memiliki lebih dari satu koneksi. Bahkan, ketika permintaan koneksi baru tiba untuk perangkat dengan koneksi yang ada, IoT Hub menutup koneksi yang ada dengan error ini.

Dalam kasus yang paling umum, masalah terpisah (seperti 404104 Sambungan Perangkat Ditutup dari Jarak Jauh) menyebabkan perangkat terputus. Perangkat mencoba untuk segera membangun kembali koneksi, tetapi IoT Hub masih mempertimbangkan perangkat yang terhubung. IoT Hub menutup sambungan sebelumnya dan mencatat kesalahan ini.

Atau, logika sisi perangkat yang salah menyebabkan perangkat membuat koneksi saat salah satu sudah terbuka.

Untuk mengatasi kesalahan ini, cari kesalahan lain di log yang dapat Anda pecahkan karena kesalahan ini biasanya muncul sebagai efek samping dari masalah sementara yang berbeda. Jika tidak, pastikan untuk mengeluarkan permintaan koneksi baru hanya jika koneksi turun.

kunci pesan perangkat 412002 hilang

Saat mencoba mengirim pesan cloud ke perangkat, Anda mungkin melihat bahwa permintaan gagal dengan kesalahan 412002 DeviceMessageLockLost.

Kesalahan ini terjadi karena saat perangkat menerima pesan cloud ke perangkat dari antrean (misalnya, menggunakan ReceiveAsync()), pesan dikunci oleh IoT Hub untuk durasi batas waktu penguncian satu menit. Jika perangkat mencoba menyelesaikan pesan setelah batas waktu penguncian berakhir, IoT Hub akan melemparkan pengecualian ini.

Jika IoT Hub tidak mendapatkan notifikasi dalam durasi batas waktu penguncian satu menit, IoT Hub akan mengembalikan pesan ke status Enqueued. Perangkat bisa coba menerima pesan lagi. Untuk mencegah kesalahan terjadi di masa mendatang, terapkan logika sisi perangkat untuk menyelesaikan pesan dalam satu menit setelah menerima pesan. Waktu habis satu menit ini tidak bisa diubah.

pengecualian pembatasan 429001

Anda mungkin melihat bahwa permintaan Anda ke IoT Hub gagal dengan kesalahan 429001 ThrottlingException.

Kesalahan ini terjadi ketika batas pembatasan IoT Hub telah terlampaui untuk operasi yang diminta.

Untuk mengatasi kesalahan ini, periksa apakah Anda mencapai batas pembatasan dengan membandingkan metrik Upaya pengiriman pesan telemetri dengan batas yang ditentukan di atas. Anda juga dapat memeriksa metrik Jumlah kesalahan pembatasan. Untuk informasi tentang metrik ini, lihat Metrik telemetri perangkat. Untuk informasi tentang cara menggunakan metrik untuk membantu Anda memantau hub IoT, lihat Memantau IoT Hub.

IoT Hub mengembalikan 429 ThrottlingException hanya setelah batas dilanggar dalam jangka waktu yang terlalu lama. Hal ini dilakukan agar pesan Anda tidak terhapus jika IoT hub Anda mendapatkan lonjakan lalu lintas. Sementara itu, IoT Hub memproses pesan pada tingkat throttle operasi, yang mungkin lambat jika ada terlalu banyak lalu lintas di backlog. Untuk mempelajari lebih lanjut, lihat Traffic Shaping IoT Hub.

Pertimbangkan untuk meningkatkan skala IoT Hub jika Anda mengalami batas kuota atau pembatasan.

500xxx Kesalahan internal

Anda mungkin melihat bahwa permintaan Anda ke IoT Hub gagal dengan kesalahan yang dimulai dengan 500 dan/atau semacam "kesalahan server." Beberapa kemungkinannya adalah:

  • 500001 ServerError:IoT Hub mengalami masalah sisi server.

  • 500008 GenericTimeout:IoT Hub tidak dapat menyelesaikan permintaan koneksi sebelum waktu habis.

  • ServiceUnavailable (tanpa kode kesalahan): IoT Hub mengalami kesalahan internal.

  • InternalServerError (tanpa kode kesalahan): IoT Hub mengalami kesalahan internal.

Mungkin ada banyak penyebab respons kesalahan 500xxx. Dalam semua kasus, masalah ini kemungkinan besar ber sementara. Sementara tim IoT Hub bekerja keras untuk mempertahankan SLA,subset kecil node IoT Hub kadang-kadang dapat mengalami kesalahan sementara. Ketika perangkat Anda mencoba untuk terhubung ke node yang mengalami masalah, Anda menerima kesalahan ini.

Untuk mengurangi kesalahan 500xxx, keluarkan coba lagi dari perangkat. Untuk mengelola upaya ulang secaraotomatis, pastikan Anda menggunakan versi terbaru Azure IoT SDKs. Untuk praktik terbaik tentang penanganan dan pengambilan kesalahan sementara, lihat Penanganan kesalahan sementara.

Jika masalah berlanjut, periksa Kesehatan Sumber Daya dan Status Azure untuk melihat apakah Hub IoT memiliki masalah yang diketahui. Anda juga dapat menggunakan fitur failover manual.

Jika tidak ada masalah yang diketahui dan masalah berlanjut, hubungi dukungan untuk penyelidikan lebih lanjut.

Partisi 503003 tidak ditemukan

Anda mungkin melihat bahwa permintaan ke IoT Hub gagal dengan kesalahan 503003 PartitionNotFound.

Kesalahan ini bersifat internal ke IoT Hub dan kemungkinan bersifat sementara. Lihat kesalahan server internal IoT Hub.

Untuk mengatasi kesalahan ini, lihat kesalahan server internal IoT Hub.

batas waktu gateway 504101

Saat mencoba memanggil metode langsung dari IoT Hub ke perangkat, Anda mungkin melihat bahwa permintaan gagal dengan kesalahan 504101 GatewayTimeout.

Kesalahan ini terjadi karena IoT Hub mengalami kesalahan dan tidak dapat mengonfirmasi apakah metode langsung selesai sebelum waktu habis. Atau, saat menggunakan versi Azure IoT C# SDK (<1.19.0), link AMQP antara perangkat dan IoT Hub dapat dihilangkan secara diam-diam karena bug.

Untuk mengatasi kesalahan ini, lakukan coba lagi atau tingkatkan ke versi terbaru Azure IOT C# SDK.