Azure IoT Hub cihaz bağlantısını izleme, tanılama ve sorunlarını giderme

Birçok olası hata noktası olduğundan IoT cihazları için bağlantı sorunlarını gidermek zor olabilir. Uygulama mantığı, fiziksel ağlar, protokoller, donanım, IoT Hub ve diğer bulut hizmetlerinin tümü sorunlara neden olabilir. Bir sorunun kaynağını algılama ve belirleme özelliği kritik önem taşır. Ancak büyük ölçekteki bir IoT çözümünün binlerce cihazı olabilir, bu nedenle tek tek cihazları el ile denetlemek pratik değildir. IoT Hub, size yardımcı olmak için iki Azure hizmetiyle tümleştirilir:

  • Azure İzleyici: Azure İzleyici, IoT Hub telemetri verilerini toplamanızı, çözümlemenizi ve üzerinde işlem yapmanızı sağlar. Bu sorunları büyük ölçekte algılamanıza, tanılamanıza ve gidermenize yardımcı olmak için IoT Hub'ın Azure İzleyici aracılığıyla sağladığı izleme özelliklerini kullanın. Bu yaklaşım, bağlantı kesildiğinde bildirimleri ve eylemleri tetikleyen uyarılar ayarlamayı ve bağlantı kesilmesine neden olan koşulları bulmak için kullanabileceğiniz günlükleri yapılandırmayı içerir.

  • Azure Event Grid: Kritik altyapı ve cihaz başına bağlantı kesilmeleri için, IoT Hub tarafından yayılan cihaz bağlantı ve bağlantı kesilme olaylarına abone olmak üzere Azure Event Grid'i kullanın. Azure Event Grid, aşağıdaki olay işleyicilerinden herhangi birini kullanmanızı sağlar:

    • Azure İşlevleri
    • Logic Apps
    • Azure Otomasyonu
    • WebHooks
    • Kuyruk Depolama
    • Karma Bağlantılar
    • Event Hubs

Protokoller ve bağlantı noktaları

Bir cihaz, IoT hub'ınıza bağlanmak için aşağıdaki protokollerden herhangi birini kullanabilir. Giden bağlantı noktası bir güvenlik duvarı tarafından engelleniyorsa, cihaz bağlanamaz.

Protocol Çıkış bağlantı noktası
MQTT 8883
WebSockets üzerinden MQTT 443
AMQP 5671
WebSockets üzerinden AMQP 443
HTTPS 443

Message Queuing Telemetri Taşıma (MQTT) bağlantısı hakkında daha fazla bilgi için IoT Hub'a bakın.

Cihaz bağlantısını doğrulama

Azure CLI ve IoT Hub portalı araçlarını kullanarak bir cihazın hub'ınıza bağlanıp iletişim kurabildiğini doğrulayın. Bu bölümdeki adımlar sorunun cihaz kimlik doğrulaması, cihazdan buluta mesajlaşma, buluttan cihaza mesajlaşma veya cihaz ikizi eşitlemesi ile ilgili olup olmadığını yalıtmanıza yardımcı olur.

Bağlantı doğrulama önkoşulları

  • Azure CLI'de azure-iot uzantısı yüklü:

    az extension add --upgrade --name azure-iot
    
  • IoT hub'ınıza bağlantı dizesiyle kayıtlı bir cihaz. Bir test cihazını kaydetmek ve bağlantı dizesi almak için aşağıdaki komutları çalıştırın. Yeni cihazınızın adıyla ve önceden oluşturduğunuz bir IoT hub'ı ile değiştirmek için sırasıyla <your-device-id> ve <your-iot-hub-name> değerini değiştirin.

    az iot hub device-identity create --device-id <your-device-id> --hub-name <your-iot-hub-name>
    
    az iot hub device-identity connection-string show --device-id <your-device-id> --hub-name <your-iot-hub-name>
    

Cihaz kimlik doğrulamasını denetleme

Bir cihazın veri alışverişinde bulunabilmesi için önce hub'ınız ile kimlik doğrulaması yapması gerekir. Kimlik doğrulamasını test etmek için:

  1. Cihaz kimliğinden bir test telemetri iletisi göndermek için Azure CLI kullanın. Başarılı bir gönderme, cihaz anahtarının geçerli olduğunu onaylar:

    az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 1
    
  2. Kimlik doğrulaması başarısız olursa, cihaz bağlantı dizesinin güncel olduğunu kontrol edin. Gerekirse yeni bir anahtar oluşturmak için birincil anahtarı sıfırlayın:

    az iot hub device-identity update --device-id <your-device-id> --set authentication.symmetricKey.primaryKey="" --hub-name <your-iot-hub-name>
    

    Ardından güncellenmiş bağlantı dizesini alın:

    az iot hub device-identity connection-string show --device-id <your-device-id> --hub-name <your-iot-hub-name>
    

Test SAS belirteci oluştur

Cihazınız SAS belirteci kimlik doğrulaması kullanıyorsa, belirteç oluşturma kodunuzla ilgili sorunları elemek için bilinen iyi bir SAS belirteci oluşturabilirsiniz:

az iot hub generate-sas-token --device-id <your-device-id> --hub-name <your-iot-hub-name>

Geçerli bir SAS belirteci şöyle görünür: SharedAccessSignature sr=your-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111

SAS belirteçlerinin program aracılığıyla nasıl oluşturulacağı gösteren kod örnekleri için iot-hub/Tutorials/ConnectivityTests klasöründeki Node.js için Azure IoT örneklerine bakın.

Cihazın bulut bağlantısını denetleme

Bir cihaz tarafından gönderilen telemetrinin hub'ınıza ulaştığını doğrulamak için:

  1. Cihazdan test telemetri iletileri gönderin:

    az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 5
    
  2. Azure portalında IoT hub'ınıza gidin. Kenar çubuğu menüsünde İzleme'nin altında Ölçümler'i seçin.

  3. Ölçüm açılan listesinde ölçüm olarak gönderilen Telemetri iletileri'ni seçin ve sağ üst köşedeki zaman aralığını Son saat olarak ayarlayın. Grafik, cihaz tarafından gönderilen iletilerin toplam sayısını gösterir.

    Not

    İletileri gönderdikten sonra ölçümlerin kullanılabilir duruma gelmesi birkaç dakika sürer.

Bulut-cihaz bağlantısını denetleme

Buluttan cihaza yolu doğrulamak için doğrudan yöntem çağrısı kullanın. Simülasyon cihazını bir terminal penceresinde çalıştırın ve ardından başka bir terminalden doğrudan bir yöntem çağırın:

az iot hub invoke-device-method --device-id <your-device-id> --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name <your-iot-hub-name>

Başarılı bir yanıt, hub'ın cihaza ulaşabileceğini onaylar. Arama zaman aşımına uğrarsa, cihazın bağlı olduğunu ve metot çağrılarını dinlediğini doğrulayın.

Cihaz çift senkronizasyonunu kontrol etme

Cihaz ikizi verisinin cihaz ile hub arasında senkronize olduğunu doğrulamak için:

  1. Bildirilen özellikleri denetlemek için geçerli cihaz ikizini görüntüleyin:

    az iot hub device-twin show --device-id <your-device-id> --hub-name <your-iot-hub-name>
    
  2. İstenen özellik güncelleştirmesini gönderin ve cihazın bu güncelleştirmeyi aldığını onaylayın:

    az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id <your-device-id> --hub-name <your-iot-hub-name>
    
  3. Cihazın bildirilen özelliklerinde istenen özelliği kabul ettiğinden emin olmak için twin show komutunu yeniden çalıştırın.

Event Grid ile Azure İzleyici karşılaştırması

Event Grid, kritik cihazlar ve altyapı için cihaz bağlantılarını izlemek için kullanabileceğiniz düşük gecikme süreli, cihaz başına izleme çözümü sağlar. Azure İzleyici, IoT Hub'ınıza bağlı cihaz sayısını izlemek ve bu sayı statik eşiğin altına düştüğünde uyarı tetikleme amacıyla kullanabileceğiniz Bağlı cihazlar adlı bir ölçüm sağlar.

Belirli bir senaryo için Event Grid mi yoksa Azure İzleyici mi kullanılacağına karar verirken aşağıdaki sorunları göz önünde bulundurun:

  • Uyarı gecikme süresi: IoT Hub bağlantı olayları Event Grid aracılığıyla çok daha hızlı teslim edilir. Bu durum Event Grid'i hızlı bildirimin istendiği senaryolar için daha iyi bir seçim haline getirir.

  • Cihaz başına bildirimler: Event Grid, bireysel cihazlar için bağlantıları ve kesilmeleri izleme olanağı sağlar. Bu durum Event Grid'i kritik cihazlar için bağlantıları izlemeniz gereken senaryolar için daha iyi bir seçenek haline getirir.

  • Basit kurulum: Azure İzleyici ölçüm uyarıları, E-posta, SMS, Ses ve diğer bildirimler aracılığıyla bildirim göndermek için diğer hizmetlerle tümleştirme gerektirmeyen basit bir kurulum deneyimi sağlar. Event Grid ile bildirim göndermek için diğer Azure hizmetleriyle tümleştirmeniz gerekir. Her iki hizmet de daha karmaşık eylemler tetikleme amacıyla diğer hizmetlerle tümleştirebilir.

Event Grid: Bağlanma ve bağlantıyı kesme olaylarını izleme

Event Grid, Azure İzleyici'den daha düşük olay gecikme süresi sağlar ve cihaz başına izleyebilirsiniz. Bu faktörler Event Grid'i kritik cihazları ve altyapıyı izlemek için tercih edilen yöntem haline getirir.

Not

Üretimdeki cihaz bağlama ve bağlantısını kesme olaylarını izlemek için, uyarıları tetikleyip cihaz bağlantı durumunu izlemek için Event Grid'de DeviceConnected ve DeviceDisconnected olaylarına abone olmanızı öneririz.

Event Grid'i cihaz bağlantısı kesintilerini izlemek veya bu kesintilerde uyarı tetiklemek için kullanırken, Azure IoT SDK'larını kullanan cihazlarda SAS belirtecinin yenilenmesi nedeniyle düzenli aralıklarla oluşan bağlantı kesintilerini filtreleme yapacak şekilde oluşturduğunuzdan emin olun. Daha fazla bilgi edinmek için bkz . Azure IoT SDK'ları ile MQTT cihaz bağlantısı kesme davranışı.

Event Grid ile cihaz bağlantısı olaylarını izleme hakkında daha fazla bilgi edinmek için aşağıdaki makaleleri inceleyin:

Azure İzleyici: Bağlantı hatalarını çözmek için günlükleri kullanma

Azure İzleyici ölçüm uyarılarını veya Event Grid'i kullanarak cihaz bağlantısının kesiliyor olduğunu algıladığınızda, nedenini gidermeye yardımcı olması için günlükleri kullanabilirsiniz. Bu bölümde Azure İzleyici Günlüklerinde sık karşılaşılan sorunların nasıl arandığı açıklanmaktadır. Buradaki adımlarda, IoT Hub Bağlantıları günlüklerini Log Analytics çalışma alanına göndermek için zaten bir tanılama ayarı oluşturduğunuz varsayılır.

IoT Hub kaynak günlüklerini Azure İzleyici Günlüklerine yönlendirmek için bir tanılama ayarı oluşturduktan sonra, Azure portalında günlükleri görüntülemek için bu adımları izleyin.

  1. Azure portalında IoT hub'ınıza gidin.

  2. IoT hub'ınızın kenar çubuğu menüsünde İzleme'nin altında Günlükler'i seçin.

  3. Basit moddanKQL moduna geçin. IoT Hub bağlantı hata günlüklerini yalıtmak için sorgu düzenleyicisine aşağıdaki sorguyu girin ve Çalıştır'ı seçin:

    AzureDiagnostics
    | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
    
  4. Sonuçlar varsa, daha fazla ayrıntı almak için OperationName, ResultType (hata kodu) ve ResultDescription (hata iletisi) arayın.

    Hata günlüğü örneğini gösteren ekran görüntüsü.

En yaygın hatalarla ilgili yardım için aşağıdaki sorun çözümleme kılavuzlarını kullanın:

Azure İzleyici: Belirli bir cihazın bağlantısını izlemek için günlükleri kullanma

Belirli bir cihazın bağlantı hatalarını ve bilgilerini görmek için Azure İzleyici'yi kullanmak istediğiniz durumlar olabilir. Bir cihazın bağlantı olaylarını yalıtmak için, önceki bölümdekiyle aynı adımları izleyebilirsiniz, ancak aşağıdaki sorguyu girebilirsiniz. <your-device-id> ifadesini cihazınızın adıyla değiştirin.

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "<your-device-id>"

Sorgu, hedef cihazınız için hem hata hem de bilgilendirme olayları döndürür. Aşağıdaki örnek çıktıda bir bilgilendirici cihazBağlan olayı gösterilmektedir.

Günlüklerdeki deviceConnect olayının ekran görüntüsü.

Azure IoT SDK'ları ile MQTT cihaz bağlantısı kesme davranışı

Azure IoT cihaz SDK'ları, SAS belirteçlerini MQTT (ve WebSockets üzerinden MQTT) protokolüyle yenilediklerinde IoT Hub'dan bağlantıyı kesip yeniden bağlanır. Günlüklerde bu, bazen hata olaylarıyla birlikte görülen bilgilendirici cihaz bağlantı kesilme ve bağlanma olayları olarak gösteriliyor.

Varsayılan olarak, belirteç ömrü tüm SDK'lar için 60 dakikadır; ancak geliştiriciler bunu bazı SDK'larda değiştirebilir. Aşağıdaki tabloda, sdk'ların her biri için belirteç ömrü, belirteç yenileme ve belirteç yenileme davranışı özetlemektedir:

SDK Belirteç ömrü Jeton yenileme Yenileme davranışı
.NET 60 dakika, yapılandırılabilir Kullanım ömrünün %85'i yapılandırılabilir SDK, belirteç ömrüne ek olarak 10 dakikalık yetkisiz kullanım süresinde bağlantıyı keser ve yeniden bağlanır. Günlüklerde oluşturulan bilgi olayları ve hatalar.
Java 60 dakika, yapılandırılabilir Kullanım ömrünün %85'i yapılandırılamaz SDK, belirteç ömrüne ek olarak 10 dakikalık yetkisiz kullanım süresinde bağlantıyı keser ve yeniden bağlanır. Günlüklerde oluşturulan bilgi olayları ve hatalar.
Node.js 60 dakika, yapılandırılabilir Yapılandırılabilir SDK, belirteç yenileme sırasında bağlantıyı keser ve yeniden bağlanır. Günlüklerde yalnızca bilgilendirme olayları oluşturulur.
Python 60 dakika, yapılandırılabilir Süre dolmadan 120 saniye önce SDK, belirteç ömrü boyunca bağlantıyı keser ve yeniden bağlanır.

Aşağıdaki ekran görüntüleri, farklı SDK'lar için Azure İzleyici Günlüklerindeki belirteç yenileme davranışını gösterir. Belirtecin kullanım ömrü ve yenileme eşiği, belirtildiği gibi varsayılan değerlerinden değiştirildi.

  • .NET cihaz SDK'sı, 1.200 saniye (20 dakika) belirteç ömrüne sahiptir ve yenileme süresi ömrün %90'ına ulaşıldığında ayarlanmıştır. Bağlantı kesilmeleri her 30 dakikada bir gerçekleşir:

    Azure İzleyici Günlüklerindeki v2 SDK ile MQTT üzerinden belirteç yenileme sırasında hata davranışını gösteren ekran görüntüsü.

  • 300 saniye (5 dakika) belirteç ömrüne ve varsayılan %85 kullanım ömrü yenilemesine sahip Java SDK'sı. Bağlantı kesilmeleri her 15 dakikada bir gerçekleşir:

    Azure İzleyici Günlüklerinde MQTT üzerinden belirteç yenileme ile ilgili hata davranışını gösteren Java SDK ile bir ekran görüntüsü.

  • 300 saniye (5 dakika) belirteç ömrü ve belirteç yenilemesi 3 dakika olarak ayarlanmış düğüm SDK'sı. Belirteç yenilemesinde bağlantı kesilmeleri gerçekleşir. Ayrıca hata da yoktur. Yalnızca bilgilendirme bağlanma/bağlantı kesme etkinlikleri yayılır.

    MQTT üzerinden belirteç yenileme sırasında ortaya çıkan hata davranışını Azure İzleyici Günlüklerinde gösteren ekran görüntüsü, Node SDK ile.

Sonuçları toplamak için aşağıdaki sorgu kullanıldı. Sorgu, özellik paketinden SDK adını ve sürümünü ayıklar. Daha fazla bilgi edinmek için IoT Hub günlüklerinde SDK sürümüne bakın.

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

IoT çözümleri geliştiricisi veya operatörü olarak, günlüklerdeki bağlanma/bağlantıyı kesme olaylarını ve ilgili hataları yorumlamak için bu davranışın farkında olmanız gerekir. Cihazlar için belirteç ömrünü veya yenileme davranışını değiştirmek istiyorsanız, cihazın bir cihaz ikizi ayarı mı yoksa bu değişikliği mümkün kılan bir cihaz yöntemi mi uyguladığını denetleyin.

Event Hubs ile cihaz bağlantılarını izliyorsanız, SAS belirteci yenilemesi nedeniyle düzenli aralıklarla meydana gelen bağlantı kesilmelerini filtreleyecek şekilde sistemi tasarladığınızdan emin olun. Örneğin, bağlantı kesme olayının ardından belirli bir zaman aralığında bir bağlantı olayı olduğu sürece, bağlantı kesilmelerine dayalı eylemleri tetiklemeyin.

Not

IoT Hub, cihaz başına yalnızca bir etkin MQTT bağlantısını destekler. Aynı cihaz kimliği adına yapılan tüm yeni MQTT bağlantıları IoT Hub'ın mevcut bağlantıyı bırakmasına neden olur.

400027 ConnectionForcefullyClosedOnNewConnection IoT Hub Günlüklerine kayıt edildi

Adımları denedim ama işe yaramadı

Önceki adımlar işe yaramadıysa şunları deneyin:

  • Sorunlu cihazlara fiziksel veya uzaktan (SSH gibi) erişiminiz varsa sorun gidermeye devam etmek için cihaz tarafı sorun giderme kılavuzunu izleyin.

  • Cihazlarınızın Etkin olduğunu doğrulayın. Azure portalında IoT Hub gidin ve Device management altında Devices öğesini seçin.

  • Cihazınız MQTT protokolü kullanıyorsa 8883 numaralı bağlantı noktasının açık olduğunu doğrulayın. Daha fazla bilgi için bu makalenin önceki kısmındaki Protokoller ve Portlar ve IoT Hub’a Bağlanma (MQTT) başlığına bakın.

  • Azure IoT Hub, Stack Overflow veya Azure desteği için Microsoft Soru-Cevap soru sayfasından yardım alın.