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
Aşağıdaki bölgelerden birinde oluşturulmuş bir Azure IoT hub'ı.
- Kuzey Avrupa
- Güneydoğu Asya
- Batı ABD 2
IoT hub'ınıza kayıtlı bir cihaz. IoT hub'ınızda bir cihaz yoksa, Cihazı kaydetme ve bu makalede kullanmak üzere cihaz bağlantı dizesi kaydetme başlığındaki adımları izleyin.
Bu makalede, IoT hub'ınıza telemetri iletileri gönderme konusunda bilgi sahibi olduğunuz varsayılır.
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:
- IoT cihazında bir ileti oluşturulur.
- IoT cihazı( bulut yardımıyla) bu iletinin bir izleme bağlamı ile atanması gerektiğine karar verir.
- SDK, ileti oluşturma için zaman damgasını içeren ileti özelliğine bir
tracestate
değer ekler. - IoT cihazı iletiyi IoT Hub'a gönderir.
- İleti IoT Hub ağ geçidine ulaşır.
- 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 benzersiztrace-id
bir değer ve "atlama" için birspan-id
değer oluşturur. IoT Hub bu değerleri işlemin altındakiDiagnosticIoTHubD2C
IoT Hub dağıtılmış izleme günlüklerine kaydeder. - İleti işleme tamamlandığında IoT Hub, işlem kapsamında başka bir
span-id
değer oluşturur ve mevcuttrace-id
değerle birlikte günlüğeDiagnosticIoTHubIngress
kaydeder. - İ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 birspan-id
değeri günlüğeDiagnosticIoTHubEgress
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.
Azure portalında IoT hub'ınıza gidin.
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.
Tanılama ayarı ekle’yi seçin.
Tanılama ayarı adı kutusuna yeni bir tanılama ayarı için bir ad girin. Örneğin DistributedTracingSettings girin.
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.
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.
Kaydet'i seçin.
(İ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.
Azure portalında IoT hub'ınıza gidin ve menünün Cihaz yönetimi bölümünden Cihazlar'ı seçin.
Cihazınızı seçin.
Dağıtılmış İzleme (önizleme) altındaki dişli simgesini seçin. Açılan panelde:
- Etkinleştir seçeneğini belirleyin.
- Örnekleme oranı için 0 ile 100 arasında bir yüzde seçin.
- Kaydet'i seçin.
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
Visual Studio 2022 için C++ iş yüküyle Masaüstü geliştirmeyi yükleyin. Visual Studio 2019 da desteklenir.
CMake'yi yükleyin. Komut isteminden girerek
cmake -version
içindePATH
olduğundan emin olun.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.
Bir alt dizin oluşturmak
cmake
ve klasöre gitmek içincmake
dizindenazure-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.
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.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ğerini
connectionString
, 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.İ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ğırmakIoTHubDeviceClient_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ştirdiktenPOLICY_CONFIGURATION_DISTRIBUTED_TRACING
sonra, cihazın izleme davranışı cihaz ikizi üzerinde yapılan dağıtılmış izleme değişikliklerini yansıtır.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
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
Uygulamayı çalıştırın. Cihaz, dağıtılmış izlemeyi destekleyen telemetri gönderir.
Debug/iothub_ll_telemetry_sample.exe
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ştirin1539243209
. Ö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
- Mikro hizmetlerdeki genel dağıtılmış izleme deseni hakkında daha fazla bilgi edinmek için bkz . Mikro hizmet mimarisi deseni: dağıtılmış izleme.