Dağıtılmış izleme (önizleme) kullanarak Azure IoT cihazdan buluta iletileri izleme

IoT iletilerini Azure hizmetlerinden geçerken izlemek için IoT Hub'da dağıtılmış izleme (önizleme) kullanın. IoT Hub, dağıtılmış izlemeyi destekleyen ilk Azure hizmetlerinden biridir. Daha fazla Azure hizmeti dağıtılmış izlemeyi desteklediğinden, çözümünüzde yer alan Azure hizmetleri genelinde Nesnelerin İnterneti (IoT) iletilerini izleyebilirsiniz. Özellik hakkında daha fazla bilgi için bkz . Dağıtılmış izleme nedir?.

IoT Hub için dağıtılmış izlemeyi etkinleştirdiğinizde şunları yapabilirsiniz:

  • İzleme bağlamını kullanarak IoT Hub aracılığıyla her iletinin akışını izleyin. İzleme bağlamı, bir bileşenden gelen olayları başka bir bileşenden gelen olaylarla ilişkilendirmenizi sağlayan bağıntı kimliklerini içerir. Bunu bir cihaz ikizi kullanarak bir alt küme veya tüm IoT cihaz iletileri için uygulayabilirsiniz.
  • İzleme bağlamını Azure İzleyici Günlükleri'ne günlüğe kaydetme.
  • Cihazlardan IoT Hub'a ve yönlendirme uç noktalarına ileti akışını ve gecikme süresini ölçüp anlayın.

Önemli

Azure IoT Hub'ı dağıtılmış izleme şu anda ÖNİzLEME aşamasındadır. Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Önkoşullar

Genel önizleme sınırları ve dikkat edilmesi gerekenler

Bu önizleme özelliğinin senaryolarınız için uygun olup olmadığını belirlemek için aşağıdaki sınırlamaları göz önünde bulundurun:

  • W3C İzleme Bağlamı standardının teklifi şu anda çalışan bir taslaktır.

  • İstemci SDK'sının şu anda desteklediği tek geliştirme dili C için Azure IoT cihaz SDK'sının genel önizleme dalındaki C'dir

  • Buluttan cihaza ikiz özelliği IoT Hub temel katmanında kullanılamaz. Ancak, Düzgün oluşturulmuş bir izleme bağlamı üst bilgisi görüyorsa IoT Hub yine de Azure İzleyici'de oturum açar.

  • Verimli bir çalışma sağlamak için IoT Hub, dağıtılmış izlemenin bir parçası olarak gerçekleşebilecek günlüğe kaydetme hızına kısıtlama uygular.

  • Dağıtılmış izleme özelliği yalnızca aşağıdaki bölgelerde oluşturulan IoT hub'ları için desteklenir:

    • Kuzey Avrupa
    • Güneydoğu Asya
    • Batı ABD 2

Azure IoT dağıtılmış izlemeyi anlama

Azure IoT başvuru mimarisi de dahil olmak üzere birçok IoT çözümü genellikle mikro hizmet mimarisinin bir değişkenini izler. Bir IoT çözümü daha karmaşık hale geldikçe, bir düzine veya daha fazla mikro hizmet kullanıyorsunuz. Bu mikro hizmetler Azure'dan olabilir veya olmayabilir.

IoT iletilerinin nerede bırakıldığına veya yavaşladığına ilişkin bir nokta saptamak zor olabilir. Örneğin, beş farklı Azure hizmeti ve 1.500 etkin cihaz kullanan bir IoT çözümünüz olduğunu düşünün. Her cihaz saniyede toplam 15.000 ileti için saniyede 10 cihazdan buluta ileti gönderir. Ancak web uygulamanızın saniyede yalnızca 10.000 ileti gördüğünü fark edeceksiniz. Suçluyu nasıl buluyorsunuz?

Hizmetler arasında bir IoT iletisinin akışını yeniden oluşturmanız için her hizmetin iletiyi benzersiz olarak tanımlayan bir bağıntı kimliği yayması gerekir. Azure İzleyici, merkezi bir sistemde bağıntı kimliklerini topladıktan sonra ileti akışını görmek için bu kimlikleri kullanabilirsiniz. Bu yöntem, dağıtılmış izleme deseni olarak adlandırılır.

Dağıtılmış izleme için daha geniş kapsamlı benimsemeyi desteklemek için Microsoft, dağıtılmış izleme için W3C standart teklifine katkıda bulunuyor. IoT Hub için dağıtılmış izleme desteği etkinleştirildiğinde, oluşturulan her ileti için şu akışı izler:

  1. IoT cihazında bir ileti oluşturulur.
  2. IoT cihazı( bulut yardımıyla) bu iletinin bir izleme bağlamı ile atanması gerektiğine karar verir.
  3. SDK, ileti oluşturma için zaman damgasını içeren ileti özelliğine bir tracestate değer ekler.
  4. IoT cihazı iletiyi IoT Hub'a gönderir.
  5. İleti IoT Hub ağ geçidine ulaşır.
  6. IoT Hub, ileti özelliklerindeki değeri arar tracestate ve doğru biçimde olup olmadığını denetler. Bu durumda IoT Hub, ileti için genel olarak benzersiz trace-id bir değer ve "atlama" için bir span-id değer oluşturur. IoT Hub bu değerleri işlemin altındaki DiagnosticIoTHubD2C IoT Hub dağıtılmış izleme günlüklerine kaydeder.
  7. İleti işleme tamamlandığında IoT Hub, işlem kapsamında başka bir span-id değer oluşturur ve mevcut trace-id değerle birlikte günlüğe DiagnosticIoTHubIngress kaydeder.
  8. İleti için yönlendirme etkinleştirildiyse, IoT Hub bunu özel uç noktaya yazar. IoT Hub, kategorinin altında aynı trace-id değere sahip başka bir span-id değeri günlüğe DiagnosticIoTHubEgress kaydeder.

IoT hub'ında dağıtılmış izlemeyi yapılandırma

Bu bölümde, dağıtılmış izleme özniteliklerini (bağıntı kimlikleri ve zaman damgaları) günlüğe kaydetmek için bir IoT hub'ı yapılandıracaksınız.

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

  2. IoT hub'ınızın sol bölmesinde ekranı aşağı kaydırarak İzleme bölümüne gelin ve Tanılama ayarları'nı seçin.

  3. Tanılama ayarı ekle’yi seçin.

  4. Tanılama ayarı adı kutusuna yeni bir tanılama ayarı için bir ad girin. Örneğin DistributedTracingSettings girin.

    Tanılama ayarlarınız için nereye ad ekleneceğini gösteren ekran görüntüsü.

  5. Günlük bilgilerinin nereye gönderileceğini belirlemek için Hedef ayrıntıları altında aşağıdaki seçeneklerden birini veya daha fazlasını seçin:

    • Depolama hesabında arşivle: Depolama hesabını günlük bilgilerini içerecek şekilde yapılandırın.
    • Bir olay hub'ına akış yapma: Olay hub'ını günlük bilgilerini içerecek şekilde yapılandırın.
    • Log Analytics'e Gönder: Log Analytics çalışma alanını günlük bilgilerini içerecek şekilde yapılandırın.
  6. Günlükler bölümünde, günlüğe kaydetmek istediğiniz işlemleri seçin.

    Dağıtılmış İzleme'yi dahil edin ve günlüğün kaç gün boyunca saklanmasını istediğinize ilişkin bir Bekletme süresi yapılandırın. Günlük saklama, depolama maliyetlerini etkiler.

    IoT Hub tanılama ayarları için Dağıtılmış İzleme işleminin nerede olduğunu gösteren ekran görüntüsü.

  7. Kaydet'i seçin.

  8. (İsteğe bağlı) İletilerin farklı yerlere akışını görmek için yönlendirme kurallarını en az iki farklı uç noktaya ayarlayın.

Günlük açıldıktan sonra, aşağıdaki durumlardan herhangi birinde geçerli izleme özellikleri içeren bir iletiyle karşılaşıldığında IoT Hub bir günlük kaydeder:

  • İleti IoT hub'ın ağ geçidine ulaşır.
  • IoT hub'ı iletiyi işler.
  • İleti özel uç noktalara yönlendirilir. Yönlendirme etkinleştirilmelidir.

Bu günlükler ve şemaları hakkında daha fazla bilgi edinmek için bkz. IoT Hub kaynak günlüklerinde IoT Hub'ı ve Dağıtılmış izlemeyi izleme.

Örnekleme seçeneklerini güncelleştirme

Buluttan izlenecek iletilerin yüzdesini değiştirmek için cihaz ikizini güncelleştirmeniz gerekir. Azure portalındaki JSON düzenleyicisini veya IoT Hub hizmeti SDK'sını kullanarak güncelleştirmeler yapabilirsiniz. Aşağıdaki alt bölümlerde örnekler verilmiştir.

Tek bir cihazı güncelleştirme

Tek bir cihazın örnekleme hızını güncelleştirmek için Azure portalını veya Visual Studio Code (VS Code) için Azure IoT Hub uzantısını kullanabilirsiniz.

  1. Azure portalında IoT hub'ınıza gidin ve menünün Cihaz yönetimi bölümünden Cihazlar'ı seçin.

  2. Cihazınızı seçin.

  3. Dağıtılmış İzleme (önizleme) altındaki dişli simgesini seçin. Açılan panelde:

    1. Etkinleştir seçeneğini belirleyin.
    2. Örnekleme oranı için 0 ile 100 arasında bir yüzde seçin.
    3. Kaydet'i seçin.

    Azure portalında dağıtılmış izlemeyi etkinleştirmeyi gösteren ekran görüntüsü.

  4. Birkaç saniye bekleyin ve yenile'yi seçin. Cihaz değişikliklerinizi başarıyla onaylarsa, onay işareti olan bir eşitleme simgesi görüntülenir.

Birden çok cihazı toplu güncelleştirme

Birden çok cihaz için dağıtılmış izleme örnekleme yapılandırmasını güncelleştirmek için otomatik cihaz yapılandırmasını kullanın. Şu ikiz şemasını izleyin:

{
    "properties": {
        "desired": {
            "azureiot*com^dtracing^1": {
                "sampling_mode": 1,
                "sampling_rate": 100
            }
        }
    }
}
Öğe adı Zorunlu Türü Açıklama
sampling_mode Yes Tamsayı Örneklemeyi açmak ve kapatmak için şu anda iki mod değeri desteklenmektedir. 1 açık ve 2 kapalı.
sampling_rate Yes Tamsayı Bu değer bir yüzdedir. Yalnızca ile 0 (dahil) arasında değerlere 100 izin verilir.

İzlemeleri sorgulama ve görselleştirme

IoT hub'ı tarafından günlüğe kaydedilen tüm izlemeleri görmek için tanılama ayarlarında seçtiğiniz günlük deposunu sorgulayın. Bu bölümde Log Analytics kullanarak sorgulama gösterilmektedir.

Log Analytics'i kaynak günlükleriyle ayarlarsanız, kategorideki günlükleri arayarak sorgu yapınDistributedTracing. Örneğin, bu sorgu günlüğe kaydedilen tüm izlemeleri gösterir:

// All distributed traces 
AzureDiagnostics 
| where Category == "DistributedTracing" 
| project TimeGenerated, Category, OperationName, Level, CorrelationId, DurationMs, properties_s 
| order by TimeGenerated asc  

Log Analytics'te birkaç örnek günlük aşağıda verilmiştir:

Oluşturulma zamanı Operasyon adı Kategori Level Bağıntı Kimliği Milisaniye cinsinden süre Properties
2018-02-22T03:28:28.633Z DiagnosticIoTHubD2C DistributedTracing Bilgi 00-8cd869a412459a25f5b4f31311223344-0144d2590aacd909-01 {"deviceId":"AZ3166","messageSize":"96","callerLocalTimeUtc":"2018-02-22T03:27:28.633Z","calleeLocalTimeUtc":"2018-02-22T03:27:28.687Z"}
2018-02-22T03:28:38.633Z DiagnosticIoTHubIngress DistributedTracing Bilgi 00-8cd869a412459a25f5b4f31311223344-349810a9bbd28730-01 20 {"isRoutingEnabled":"false","parentSpanId":"0144d2590aacd909"}
2018-02-22T03:28:48.633Z DiagnosticIoTHubEgress DistributedTracing Bilgi 00-8cd869a412459a25f5b4f31311223344-349810a9bbd28730-01 23 {"endpointType":"EventHub","endpointName":"myEventHub", "parentSpanId":"0144d2590aacd909"}

Günlük türlerini anlamak için bkz . Azure IoT Hub dağıtılmış izleme günlükleri.

Örnek uygulama çalıştırma

Bu bölümde, Azure IoT C SDK'sı ile kullanmak üzere bir geliştirme ortamı hazırlamış olacaksınız. Ardından, cihazınızın telemetri iletilerinde dağıtılmış izlemeyi etkinleştirmek için örneklerden birini değiştirirsiniz.

Bu yönergeler Windows'da örneği oluşturmaya yöneliktir. Diğer ortamlar için bkz. Platforma Özgü Geliştirme için C SDK'sını veya Önceden Paketlenmiş C SDK'sını derleme.

Kaynak kodu kopyalama ve başlatma

  1. Visual Studio 2022 için C++ iş yüküyle Masaüstü geliştirmeyi yükleyin. Visual Studio 2019 da desteklenir.

  2. CMake'yi yükleyin. Komut isteminden girerek cmake -version içinde PATH olduğundan emin olun.

  3. Komut istemini veya Git Bash kabuğunu açın. Azure IoT C SDK GitHub deposunun genel önizleme dalının en son sürümünü kopyalamak için aşağıdaki komutları çalıştırın:

    git clone -b public-preview https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Bu işlemin tamamlanmasının birkaç dakika sürmesini bekleyebilirsiniz.

  4. Bir alt dizin oluşturmak cmake ve klasöre gitmek için cmake dizinden azure-iot-sdk-c aşağıdaki komutları çalıştırın:

    mkdir cmake
    cd cmake
    cmake ..
    

    CMake, C++ derleyicinizi bulamazsa, önceki komutu çalıştırırken derleme hatalarıyla karşılaşabilirsiniz. Böyle bir durumda Visual Studio komut isteminde komutunu çalıştırmayı deneyin.

    Derleme başarılı olduktan sonra, son birkaç çıkış satırı aşağıdaki çıkışa benzer olacaktır:

    $ cmake ..
    -- Building for: Visual Studio 15 2017
    -- Selecting Windows SDK version 10.0.16299.0 to target Windows 10.0.17134.
    -- The C compiler identification is MSVC 19.12.25835.0
    -- The CXX compiler identification is MSVC 19.12.25835.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: E:/IoT Testing/azure-iot-sdk-c/cmake
    

Dağıtılmış izlemeyi etkinleştirmek için telemetri örneğini düzenleyin

Bu bölümde, dağıtılmış izlemeyi etkinleştirmek için SDK deposundaki iothub_ll_telemetry_sample.c örneğini düzenlersiniz. İsterseniz, azure-iot-distributed-tracing-sample deposundan da örneğin önceden düzenlenmiş bir sürümünü kopyalayabilirsiniz.

  1. Kaynak dosyayı açmak azure-iot-sdk-c/iothub_client/samples/iothub_ll_telemetry_sample/iothub_ll_telemetry_sample.c için bir düzenleyici kullanın.

  2. connectionString sabitinin bildirimini bulun:

    /* Paste in the your iothub connection string  */
    static const char* connectionString = "[device connection string]";
    #define MESSAGE_COUNT        5000
    static bool g_continueRunning = true;
    static size_t g_message_count_send_confirmations = 0;
    

    Sabit değeriniconnectionString, telemetri göndermek için hızlı başlangıcın Cihaz kaydetme bölümünde kaydettiğiniz cihaz bağlantı dizesi değiştirin.

  3. İleti gönderme döngüsünden önce bağlantı durumu geri çağırma işlevini kaydetmek için çağıran IoTHubDeviceClient_LL_SetConnectionStatusCallback kod satırını bulun. Cihaz için dağıtılmış izlemeyi çağırmak IoTHubDeviceClient_LL_EnablePolicyConfiguration ve etkinleştirmek için bu satırın altına kod ekleyin:

    // Setting connection status callback to get indication of connection to iothub
    (void)IoTHubDeviceClient_LL_SetConnectionStatusCallback(device_ll_handle, connection_status_callback, NULL);
    
    // Enabled the distrubted tracing policy for the device
    (void)IoTHubDeviceClient_LL_EnablePolicyConfiguration(device_ll_handle, POLICY_CONFIGURATION_DISTRIBUTED_TRACING, true);
    
    do
    {
        if (messages_sent < MESSAGE_COUNT)
    

    işlevi, IoTHubDeviceClient_LL_EnablePolicyConfiguration cihaz ikizleri aracılığıyla yapılandırılan belirli IoT Hub özellikleri için ilkeleri etkinleştirir. Ek kod satırını kullanarak etkinleştirdikten POLICY_CONFIGURATION_DISTRIBUTED_TRACING sonra, cihazın izleme davranışı cihaz ikizi üzerinde yapılan dağıtılmış izleme değişikliklerini yansıtır.

  4. Tüm kotanızı kullanmadan örnek uygulamayı çalışır durumda tutmak için ileti gönderme döngüsünün sonuna bir saniyelik bir gecikme ekleyin:

        else if (g_message_count_send_confirmations >= MESSAGE_COUNT)
        {
            // After all messages are all received stop running
            g_continueRunning = false;
        }
    
        IoTHubDeviceClient_LL_DoWork(device_ll_handle);
        ThreadAPI_Sleep(1000);
    
    } while (g_continueRunning);
    

Derleyin ve çalıştırın

  1. iothub_ll_telemetry_sample Daha önce oluşturduğunuz CMake dizininden (azure-iot-sdk-c/cmake) proje dizinine gidin ve örneği derleyin:

    cd iothub_client/samples/iothub_ll_telemetry_sample
    cmake --build . --target iothub_ll_telemetry_sample --config Debug
    
  2. Uygulamayı çalıştırın. Cihaz, dağıtılmış izlemeyi destekleyen telemetri gönderir.

    Debug/iothub_ll_telemetry_sample.exe
    
  3. Uygulamayı çalışır durumda tutun. IoT Hub'a gönderilen iletileri konsol penceresinde gözlemleyebilirsiniz.

Buluttan örnekleme kararları alabilen bir istemci uygulaması için dağıtılmış izleme örneği deposundaki iothub_devicetwin_sample.c örneğini deneyin.

Microsoft dışı istemciler için geçici çözüm

C SDK'sını kullanmadan dağıtılmış izleme özelliğini uygulamak daha karmaşıktır. Bunu önermiyoruz.

İlk olarak, IoT Hub iletilerini oluşturma ve okuma geliştirici kılavuzunu izleyerek iletilerinizdeki tüm IoT Hub protokolü temel öğelerini uygulamanız gerekir. Ardından, MQTT ve AMQP iletilerindeki protokol özelliklerini düzenleyerek sistem özelliği olarak ekleyin tracestate .

Özellikle:

  • MQTT için ileti konusuna ekleyin %24.tracestate=timestamp%3d1539243209 . değerini, iletinin Unix zaman damgası biçimindeki oluşturma zamanıyla değiştirin 1539243209 . Örneğin, C SDK'sında uygulamaya bakın.
  • AMQP için ileti ek açıklaması olarak ve value("timestamp=1539243209") ekleyinkey("tracestate"). Başvuru uygulaması için uamqp_messaging.c dosyasına bakın.

Bu özelliği içeren iletilerin yüzdesini denetlemek için ikiz güncelleştirmeleri gibi bulut tarafından başlatılan olayları dinlemek için mantık uygulayın.

Sonraki adımlar