Memantau, mendiagnosa, dan memecahkan masalah konektivitas perangkat Azure IoT Hub
Masalah konektivitas untuk perangkat IoT mungkin sulit dipecahkan karena ada banyak kemungkinan kegagalan. Logika aplikasi, jaringan fisik, protokol, perangkat keras, IoT Hub, dan layanan cloud lainnya semuanya dapat menyebabkan masalah. Kemampuan untuk mendeteksi dan menentukan sumber masalah sangat penting. Namun, solusi IoT dalam skala besar dapat memiliki ribuan perangkat, sehingga tidak praktis untuk memeriksa perangkat individu secara manual. IoT Hub terintegrasi dengan dua layanan Azure untuk membantu Anda:
Azure Monitor Azure Monitor memungkinkan Anda mengumpulkan, menganalisis, dan bertindak berdasarkan telemetri dari IoT Hub. Untuk membantu Anda mendeteksi, mendiagnosis, dan memecahkan masalah ini dalam skala besar, gunakan kemampuan pemantauan yang disediakan IoT Hub melalui Azure Monitor. Pendekatan ini mencakup pengaturan pemberitahuan untuk memicu pemberitahuan dan tindakan saat pemutusan sambungan terjadi dan mengonfigurasi log yang dapat Anda gunakan untuk menemukan kondisi yang menyebabkan pemutusan sambungan.
Azure Event Grid Untuk infrastruktur penting dan koneksi per perangkat, gunakan Azure Event Grid untuk berlangganan perangkat yang menyambungkan dan memutuskan sambungan peristiwa yang dipancarkan oleh IoT Hub. Azure Event Grid memungkinkan Anda menggunakan salah satu penanganan aktivitas berikut ini:
- Azure Functions
- Logic Apps
- Otomatisasi Azure
- WebHooks
- Queue Storage
- Sambungan Hibrida
- Event Hubs
Event Grid vs. Azure Monitor
Event Grid menyediakan solusi pemantauan per perangkat latensi rendah yang dapat Anda gunakan untuk melacak koneksi perangkat untuk perangkat dan infrastruktur penting. Azure Monitor menyediakan metrik yang disebut Perangkat tersambung yang dapat Anda gunakan untuk memantau jumlah perangkat yang tersambung ke IoT Hub Anda dan memicu pemberitahuan saat angka tersebut turun di bawah ambang statis.
Pertimbangkan masalah berikut saat memutuskan apakah akan menggunakan Event Grid atau Azure Monitor untuk skenario tertentu:
Latensi pemberitahuan: Peristiwa koneksi IoT Hub dikirimkan jauh lebih cepat melalui Event Grid. Fakta ini membuat Event Grid menjadi pilihan yang lebih baik untuk skenario di mana pemberitahuan cepat diinginkan.
Notifikasi per perangkat: Event Grid menyediakan kemampuan untuk melacak koneksi dan memutuskan sambungan untuk masing-masing perangkat. Fakta ini membuat Event Grid menjadi pilihan yang lebih baik untuk skenario di mana Anda perlu memantau koneksi untuk perangkat penting.
Penyiapan ringan: Pemberitahuan metrik Azure Monitor memberikan pengalaman penyiapan ringan yang tidak memerlukan integrasi dengan layanan lain untuk mengirimkan notifikasi melalui Email, SMS, Voice, dan pemberitahuan lainnya. Dengan Event Grid, Anda perlu berintegrasi dengan layanan Azure lainnya untuk mengirimkan pemberitahuan. Kedua layanan dapat berintegrasi dengan layanan lain untuk memicu tindakan yang lebih kompleks.
Event Grid: Memantau peristiwa yang tersambung dan terputus
Untuk memantau aktivitas koneksi dan pemutusan sambungan perangkat dalam produksi, sebaiknya berlangganan peristiwa DeviceConnected dan DeviceDisconnected di Event Grid untuk memicu pemberitahuan dan memantau status koneksi perangkat. Event Grid memberikan latensi peristiwa yang lebih rendah daripada Azure Monitor, dan Anda dapat memantau berdasarkan per perangkat. Faktor-faktor ini menjadikan Event Grid sebagai metode yang disukai untuk memantau perangkat dan infrastruktur penting.
Saat Anda menggunakan Event Grid untuk memantau atau memicu pemberitahuan pada perangkat terputus, pastikan Anda membuat dengan cara memfilter pemutusan sambungan berkala karena perpanjangan token SAS pada perangkat yang menggunakan SDK Azure IoT. Untuk mempelajari lebih lanjut, lihat Perilaku pemutusan sambungan perangkat MQTT dengan Azure IoT SDK.
Jelajahi artikel berikut untuk mempelajari selengkapnya tentang memantau peristiwa koneksi perangkat dengan Event Grid:
Untuk gambaran umum penggunaan Event Grid dengan IoT Hub, lihat Bereaksi pada peristiwa IoT Hub dengan Event Grid. Perhatikan secara khusus batasan untuk bagian peristiwa status koneksi perangkat.
Untuk tutorial tentang memesan peristiwa koneksi perangkat, lihat Memesan peristiwa koneksi perangkat dari Azure IoT Hub menggunakan Azure Cosmos DB.
Untuk tutorial tentang mengirim pemberitahuan Email, lihat Mengirim pemberitahuan email tentang peristiwa Azure IoT Hub menggunakan Event Grid dan Logic Apps dalam dokumentasi Event Grid.
Azure Monitor: Menggunakan log untuk mengatasi kesalahan konektivitas
Saat Anda mendeteksi perangkat terputus dengan menggunakan pemberitahuan metrik Azure Monitor atau Event Grid, Anda dapat menggunakan log untuk membantu memecahkan masalah alasan. Bagian ini menjelaskan cara mencari masalah umum di Azure Monitor Logs. Langkah-langkah di sini mengasumsikan bahwa Anda sudah membuat pengaturan diagnostik untuk mengirim log Koneksi IoT Hub ke ruang kerja Analitik Log.
Setelah Anda membuat pengaturan diagnostik untuk merutekan log sumber daya IoT Hub ke Log Azure Monitor, ikuti langkah-langkah ini untuk melihat log di portal Azure.
Navigasi ke hub IoT Anda di portal Azure.
Di bawah Pemantauan di panel kiri hub IoT Anda, Pilih Log.
Untuk mengisolasi log kesalahan konektivitas untuk IoT Hub, masukkan kueri berikut di editor kueri lalu pilih Jalankan:
AzureDiagnostics | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
Jika ada hasil, cari
OperationName
,ResultType
(kode galat), danResultDescription
(pesan kesalahan) untuk mendapatkan detail selengkapnya.
Gunakan panduan resolusi masalah berikut untuk bantuan dengan kesalahan paling umum:
Azure Monitor: Gunakan log untuk memantau konektivitas bagi perangkat tertentu
Mungkin ada situasi saat Anda ingin menggunakan Azure Monitor untuk melihat kesalahan dan informasi konektivitas untuk perangkat tertentu. Untuk mengisolasi aktivitas konektivitas untuk perangkat, Anda dapat mengikuti langkah yang sama seperti di bagian sebelumnya, tetapi masukkan kueri berikut. Ganti perangkat uji dengan nama perangkat Anda.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "test-device"
Kueri mengembalikan peristiwa kesalahan dan informasi untuk perangkat target Anda. Contoh output berikut menunjukkan peristiwa informasi deviceConnect:
Perangkat MQTT memutuskan sambungan perilaku dengan Azure IoT SDK
Perangkat Azure IoT SDK terputus dari IoT Hub dan kemudian disambungkan kembali saat memperbarui token SAS melalui protokol MQTT (dan MQTT melalui WebSocket). Dalam log, ini muncul saat perangkat informasi memutuskan sambungan dan menyambungkan peristiwa yang terkadang disertai dengan peristiwa kesalahan.
Secara default, masa pakai token adalah 60 menit untuk semua SDK; namun, pengembang dapat mengubahnya di beberapa SDK. Tabel berikut ini meringkas masa pakai token, perpanjangan token, dan perilaku perpanjangan token untuk setiap SDK:
SDK | Masa pakai token | Perpanjangan token | Perilaku perpanjangan |
---|---|---|---|
.NET | 60 menit, dapat dikonfigurasi | 85% dari masa pakai, dapat dikonfigurasi | SDK terputus dan tersambung kembali pada umur token ditambah masa tenggang 10 menit. Peristiwa dan kesalahan informasi yang dibuat dalam log. |
Java | 60 menit, dapat dikonfigurasi | 85% dari masa pakai, tidak dapat dikonfigurasi | SDK terputus dan tersambung kembali pada umur token ditambah masa tenggang 10 menit. Peristiwa dan kesalahan informasi yang dibuat dalam log. |
Node.js | 60 menit, dapat dikonfigurasi | dapat dikonfigurasi | SDK terputus dan tersambung kembali saat perpanjangan token. Hanya peristiwa informasi yang dibuat dalam log. |
Python | 60 menit, dapat dikonfigurasi | 120 detik sebelum kedaluwarsa | SDK terputus dan tersambung kembali pada umur token. |
Cuplikan layar berikut menunjukkan perilaku perpanjangan token di Azure Monitor Logs untuk SDK yang berbeda. Masa pakai token dan ambang perpanjangan telah diubah dari default seperti yang dicatat.
SDK perangkat .NET dengan masa pakai token 1200 detik (20 menit) dan pembaruan diatur terjadi pada 90% masa pakai. pemutusan sambungan terjadi setiap 30 menit:
Java SDK dengan masa pakai token 300 detik (5 menit) dan 85% perpanjangan masa pakai default. Pemutusan sambungan terjadi setiap 15 menit:
SDK simpul dengan masa pakai token 300 detik (5 menit) dan perpanjangan token diatur terjadi pada 3 menit. Pemutusan sambungan terjadi pada perpanjangan token. Selain itu, tidak ada kesalahan. Hanya peristiwa koneksi/pemutusan informasi yang dipancarkan:
Kueri berikut digunakan untuk mengumpulkan hasil. Kueri mengekstrak nama dan versi SDK dari tas properti. Untuk mempelajari selengkapnya, lihat Versi SDK di log IoT Hub.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend parsed_json = parse_json(properties_s)
| extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId) , Protocol = tostring(parsed_json.protocol)
| distinct TimeGenerated, OperationName, Level, ResultType, ResultDescription, DeviceId, Protocol, SDKVersion
Sebagai pengembang atau operator solusi IoT, Anda perlu mengetahui perilaku ini untuk menginterpretasikan peristiwa sambungkan/putuskan dan kesalahan terkait dalam log. Jika Anda ingin mengubah masa pakai token atau perilaku perpanjangan untuk perangkat, periksa untuk melihat apakah perangkat menerapkan pengaturan kembar perangkat atau metode perangkat yang memungkinkan perubahan ini.
Jika Anda memantau koneksi perangkat dengan Azure Event Hubs, pastikan Anda membangun dengan cara memfilter pemutusan berkala karena pembaruan token SAS. Misalnya, jangan memicu tindakan berdasarkan pemutusan sambungan selama peristiwa pemutusan diikuti oleh peristiwa koneksi dalam rentang waktu tertentu.
Catatan
IoT Hub hanya mendukung satu koneksi MQTT aktif per perangkat. Koneksi MQTT baru atas nama ID perangkat yang sama menyebabkan IoT Hub memutuskan koneksi yang ada.
400027 ConnectionForcefullyClosedOnNewConnection akan masuk ke IoT Hub Logs
Aku sudah mencoba langkah-langkahnya, tetapi tidak berfungsi
Jika langkah-langkah sebelumnya tidak membantu, cobalah:
Jika Anda memiliki akses ke perangkat bermasalah, baik secara fisik maupun jarak jauh (seperti SSH), ikuti panduan pemecahan masalah sisi perangkat untuk melanjutkan pemecahan masalah.
Verifikasi bahwa perangkat Andadiaktifkandi portal Microsoft Azure > hub IoT Anda> perangkat IoT.
Jika perangkat Anda menggunakan protokol MQTT, verifikasi bahwa port 8883 terbuka. Untuk mengetahui informasi selengkapnya, lihat Menyambungkan ke IoT Hub (MQTT).
Dapatkan bantuan dari halaman pertanyaan Microsoft Q&A untuk Azure IoT Hub, Stack Overflow, atau dukungan Azure.
Langkah berikutnya
Untuk mempelajari lebih lanjut tentang mengatasi masalah sementara, lihat Penanganan kesalahan sementara.
Untuk mempelajari selengkapnya tentang SDK perangkat Azure IoT dan mengelola percobaan ulang, lihat Mencoba kembali pola.