Azure IoT-eszközökről felhőbe irányuló üzenetek nyomon követése elosztott nyomkövetéssel (előzetes verzió)
Az elosztott nyomkövetés (előzetes verzió) használata az IoT Hubban az IoT-üzenetek monitorozásához az Azure-szolgáltatásokon keresztüli áthaladásuk során. Az IoT Hub az egyik első Azure-szolgáltatás, amely támogatja az elosztott nyomkövetést. Mivel több Azure-szolgáltatás támogatja az elosztott nyomkövetést, nyomon követheti az IoT-üzeneteket a megoldásban érintett Azure-szolgáltatásokban. A funkcióval kapcsolatos további információkért lásd : Mi az elosztott nyomkövetés?.
Ha engedélyezi az elosztott nyomkövetést az IoT Hubhoz, a következő műveleteket végezheti el:
- Nyomon követési környezet használatával monitorozza az egyes üzenetek IoT Hubon keresztüli folyamatát. A nyomkövetési környezet olyan korrelációs azonosítókat tartalmaz, amelyek lehetővé teszik az egyik összetevő eseményeinek korrelációit egy másik összetevő eseményeivel. Egy ikereszköz használatával alkalmazhatja egy részhalmazra vagy az összes IoT-eszközüzenetre.
- Naplózza a nyomkövetési környezetet az Azure Monitor-naplókba.
- Az eszközökről az IoT Hubra és az útválasztási végpontokra érkező üzenetáramlás és késés mérése és megértése.
Fontos
Az Azure IoT Hub elosztott nyomkövetése jelenleg előzetes verzióban érhető el. A bétaverziójú, előzetes verziójú vagy másként még általánosan nem elérhető Azure-szolgáltatások jogi feltételeit lásd: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.
Előfeltételek
Az alábbi régiók egyikében létrehozott Azure IoT Hub.
- Észak-Európa
- Délkelet-Ázsia
- USA 2. nyugati régiója
Az IoT Hubon regisztrált eszköz. Ha nincs eszköze az IoT Hubban, kövesse az eszköz regisztrálása és az eszköz kapcsolati sztring mentésének lépéseit ebben a cikkben.
Ez a cikk feltételezi, hogy ismeri a telemetriai üzenetek IoT Hubra való küldését.
A Git legújabb verziója.
Nyilvános előzetes verzió korlátai és szempontjai
Fontolja meg az alábbi korlátozásokat annak megállapításához, hogy ez az előzetes verziójú funkció megfelelő-e a forgatókönyvekhez:
A W3C Trace Context szabványra vonatkozó javaslat jelenleg egy munkatervezet.
Az ügyfél SDK által jelenleg támogatott egyetlen fejlesztési nyelv a C, a C-hez készült Azure IoT-eszköz SDK nyilvános előzetes verziójában
Az IoT Hub alapszinten nem érhető el a felhőalapú ikerképesség. Az IoT Hub azonban továbbra is bejelentkezik az Azure Monitorba, ha egy megfelelően összeállított nyomkövetési környezet fejlécét látja.
A hatékony működés érdekében az IoT Hub szabályozást alkalmaz az elosztott nyomkövetés részeként előforduló naplózási sebességre.
Az elosztott nyomkövetési funkció csak a következő régiókban létrehozott IoT Hubok esetében támogatott:
- Észak-Európa
- Délkelet-Ázsia
- USA 2. nyugati régiója
Az Azure IoT elosztott nyomkövetésének ismertetése
Számos IoT-megoldás, köztük az Azure IoT referenciaarchitektúra általában a mikroszolgáltatás-architektúra egy változatát követi. Ahogy egy IoT-megoldás egyre összetettebbé válik, egy tucat vagy több mikroszolgáltatást kell használnia. Előfordulhat, hogy ezek a mikroszolgáltatások az Azure-ból származnak vagy nem.
Az IoT-üzenetek kiesési vagy lelassulási helyeinek kitűzése kihívást jelenthet. Tegyük fel például, hogy van egy IoT-megoldása, amely öt különböző Azure-szolgáltatást és 1500 aktív eszközt használ. Minden eszköz másodpercenként 10 eszközről felhőbe irányuló üzenetet küld, másodpercenként összesen 15 000 üzenetért. Észreveheti azonban, hogy a webalkalmazás másodpercenként csak 10 000 üzenetet lát. Hogy találja meg a bűnöst?
Az IoT-üzenetek szolgáltatások közötti folyamatának rekonstruálásához minden szolgáltatásnak egy olyan korrelációs azonosítót kell propagálnia, amely egyedileg azonosítja az üzenetet. Miután az Azure Monitor összegyűjtötte a korrelációs azonosítókat egy központi rendszerben, ezeket az azonosítókat használhatja az üzenetfolyam megtekintéséhez. Ezt a módszert elosztott nyomkövetési mintának nevezzük.
Az elosztott nyomkövetés szélesebb körű bevezetésének támogatása érdekében a Microsoft hozzájárul az elosztott nyomkövetésre vonatkozó W3C szabványjavaslathoz. Ha engedélyezve van az elosztott nyomkövetés támogatása az IoT Hubhoz, az a következő folyamatot követi minden egyes létrehozott üzenethez:
- Üzenet jön létre az IoT-eszközön.
- Az IoT-eszköz (a felhő segítségével) úgy dönt, hogy ezt az üzenetet nyomkövetési környezettel kell hozzárendelni.
- Az SDK hozzáad egy
tracestate
értéket az üzenettulajdonsághoz, amely tartalmazza az üzenet létrehozásának időbélyegét. - Az IoT-eszköz elküldi az üzenetet az IoT Hubnak.
- Az üzenet az IoT Hub-átjáróra érkezik.
- Az IoT Hub megkeresi az
tracestate
üzenet tulajdonságainak értékét, és ellenőrzi, hogy a megfelelő formátumban van-e. Ha igen, az IoT Hub létrehoz egy globálisan egyeditrace-id
értéket az üzenethez, és egyspan-id
értéket a "ugrás" számára. Az IoT Hub ezeket az értékeket a művelet alatt lévő IoT Hub elosztott nyomkövetésiDiagnosticIoTHubD2C
naplóiban rögzíti. - Ha az üzenetfeldolgozás befejeződött, az IoT Hub létrehoz egy másik
span-id
értéket, és naplózza azt a művelet alattDiagnosticIoTHubIngress
, a meglévőtrace-id
értékkel együtt. - Ha az üzenethez engedélyezve van az útválasztás, az IoT Hub az egyéni végpontra írja. Az IoT Hub egy másik
span-id
értéket naplóz a kategória alatt ugyanazzaltrace-id
azDiagnosticIoTHubEgress
értékkel.
Elosztott nyomkövetés konfigurálása IoT Hubon
Ebben a szakaszban egy IoT Hubot konfigurál az elosztott nyomkövetési attribútumok (korrelációs azonosítók és időbélyegek) naplózásához.
Nyissa meg az IoT Hubot az Azure Portalon.
Az IoT Hub bal oldali ablaktábláján görgessen le a Figyelés szakaszhoz, és válassza a Diagnosztikai beállítások lehetőséget.
Válassza a Diagnosztikai beállítások megadása lehetőséget.
A Diagnosztikai beállítás név mezőjében adjon nevet egy új diagnosztikai beállításnak. Írja be például az DistributedTracingSettings kifejezést.
A Céladatok területen válasszon egyet vagy többet a következő lehetőségek közül a naplózási adatok elküldésének helyének meghatározásához:
- Archiválás tárfiókba: Konfiguráljon egy tárfiókot a naplózási adatok tárolására.
- Streamelés egy eseményközpontba: Konfiguráljon egy eseményközpontot a naplózási információknak megfelelően.
- Küldés a Log Analyticsbe: Konfiguráljon egy Log Analytics-munkaterületet a naplózási adatok megadásához.
A Naplók szakaszban válassza ki a naplózni kívánt műveleteket.
Adja meg az elosztott nyomkövetést , és konfiguráljon egy megőrzési időtartamot, hogy hány napig szeretné megőrizni a naplózást. A naplómegőrzés hatással van a tárolási költségekre.
Válassza a Mentés lehetőséget.
(Nem kötelező) Az üzenetek különböző helyekre való áramlásának megtekintéséhez állítsa be az útválasztási szabályokat legalább két különböző végpontra.
A naplózás bekapcsolása után az IoT Hub rögzíti a naplót, amikor az alábbi helyzetekben érvényes nyomkövetési tulajdonságokat tartalmazó üzenet lép fel:
- Az üzenet az IoT Hub átjárójára érkezik.
- Az IoT Hub feldolgozza az üzenetet.
- Az üzenet egyéni végpontokra lesz irányítva. Az útválasztást engedélyezni kell.
Ezekről a naplókról és sémáikról további információt az IoT Hub és az Elosztott nyomkövetés monitorozása az IoT Hub erőforrásnaplóiban című témakörben talál.
Mintavételezési beállítások frissítése
A felhőből nyomon követhető üzenetek százalékos arányának módosításához frissítenie kell az ikereszközt. A frissítéseket az Azure Portal JSON-szerkesztőjével vagy az IoT Hub szolgáltatás SDK-val végezheti el. Az alábbi alszakaszok példákat mutatnak be.
Egyetlen eszköz frissítése
Az Azure Portal vagy a Visual Studio Code -hoz készült Azure IoT Hub-bővítmény (VS Code) használatával frissítheti egyetlen eszköz mintavételezési sebességét.
Nyissa meg az IoT Hubot az Azure Portalon, majd válassza az Eszközök lehetőséget a menü Eszközfelügyelet szakaszában.
Válassza ki az eszközt.
Válassza a fogaskerék ikont az Elosztott nyomkövetés (előzetes verzió) területen. A megnyíló panelen:
- Válassza az Engedélyezés lehetőséget.
- Mintavételezési arány esetén válasszon 0 és 100 közötti százalékot.
- Válassza a Mentés lehetőséget.
Várjon néhány másodpercet, majd válassza a Frissítés lehetőséget. Ha az eszköz sikeresen nyugtázza a módosításokat, megjelenik egy pipával ellátott szinkronizálási ikon.
Több eszköz tömeges frissítése
Ha több eszköz elosztott nyomkövetési mintavételezési konfigurációját szeretné frissíteni, használja az automatikus eszközkonfigurációt. Kövesse ezt az ikerséma:
{
"properties": {
"desired": {
"azureiot*com^dtracing^1": {
"sampling_mode": 1,
"sampling_rate": 100
}
}
}
}
Elem neve | Kötelező | Típus | Leírás |
---|---|---|---|
sampling_mode |
Igen | Egész | Jelenleg két módérték támogatott a mintavételezés be- és kikapcsolásához. 1 be van kapcsolva, és 2 ki van kapcsolva. |
sampling_rate |
Igen | Egész | Ez az érték százalékos érték. Csak a ( 0 100 befogadó) értékek engedélyezettek. |
Nyomkövetések lekérdezése és vizualizációja
Az IoT Hub által naplózott összes nyomkövetés megtekintéséhez kérdezze le a diagnosztikai beállítások között kiválasztott naplótárat. Ez a szakasz bemutatja, hogyan kérdezhet le a Log Analytics használatával.
Ha erőforrásnaplókkal állítja be a Log Analytics szolgáltatást, akkor a kategóriában lévő naplók DistributedTracing
alapján kérdezhet le. Ez a lekérdezés például az összes naplózott nyomkövetést megjeleníti:
// All distributed traces
AzureDiagnostics
| where Category == "DistributedTracing"
| project TimeGenerated, Category, OperationName, Level, CorrelationId, DurationMs, properties_s
| order by TimeGenerated asc
Íme néhány példanapló a Log Analyticsben:
Létrehozás időpontja | Művelet neve | Kategória | Level | Korrelációs azonosító | Időtartam ezredmásodpercben | Tulajdonságok |
---|---|---|---|---|---|---|
2018-02-22T03:28:28.633Z | DiagnosticIoTHubD2C | DistributedTracing | Tájékoztató | 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 | Tájékoztató | 00-8cd869a412459a25f5b4f31311223344-349810a9bbd28730-01 | 20 | {"isRoutingEnabled":"false","parentSpanId":"0144d2590aacd909"} |
2018-02-22T03:28:48.633Z | DiagnosticIoTHubEgress | DistributedTracing | Tájékoztató | 00-8cd869a412459a25f5b4f31311223344-349810a9bbd28730-01 | 23 | {"endpointType":"EventHub","endpointName":"myEventHub", "parentSpanId":"0144d2590aacd909"} |
A naplók típusainak megismeréséhez tekintse meg az Azure IoT Hub elosztott nyomkövetési naplóit.
Mintaalkalmazás futtatása
Ebben a szakaszban fejlesztési környezetet készít elő az Azure IoT C SDK-val való használatra. Ezután módosítsa az egyik mintát, hogy engedélyezze az elosztott nyomkövetést az eszköz telemetriai üzenetei között.
Ezek az utasítások a minta Windows rendszeren való létrehozásához szükségesek. Más környezetek esetén lásd : C SDK vagy előre csomagolt C SDK platformspecifikus fejlesztéshez.
A forráskód klónozása és inicializálása
Telepítse az asztali fejlesztést C++ számítási feladattal a Visual Studio 2022-hez. A Visual Studio 2019 is támogatott.
Telepítse a CMake-t. A parancssorból való beírással
cmake -version
győződjön meg arról, hogy a benne vanPATH
.Nyisson meg egy parancssort vagy a Git Bash-felületet. Futtassa a következő parancsokat az Azure IoT C SDK GitHub-adattár nyilvános előzetes verziójának legújabb kiadásának klónozásához:
git clone -b public-preview https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
A művelet várhatóan több percig is eltarthat.
Alkönyvtár létrehozásához
cmake
futtassa a következő parancsokat aazure-iot-sdk-c
könyvtárból, és lépjen acmake
mappára:mkdir cmake cd cmake cmake ..
Ha a CMake nem találja a C++ fordítót, buildelési hibákba ütközhet az előző parancs futtatása során. Ha ez történik, futtassa a parancsot a Visual Studio parancssorában.
A build sikeres végrehajtása után az utolsó néhány kimeneti sor az alábbi kimenethez hasonlóan fog kinézni:
$ 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
A telemetriai minta szerkesztése az elosztott nyomkövetés engedélyezéséhez
Ebben a szakaszban az elosztott nyomkövetés engedélyezéséhez szerkessze a iothub_ll_telemetry_sample.c mintát az SDK-adattárban. Vagy másolhatja a minta már szerkesztett verzióját az azure-iot-distributed-tracing-sample adattárból.
A forrásfájl megnyitásához
azure-iot-sdk-c/iothub_client/samples/iothub_ll_telemetry_sample/iothub_ll_telemetry_sample.c
használjon szerkesztőt.Keresse meg a
connectionString
konstans deklarációját:/* 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;
Cserélje le az
connectionString
állandó értékét arra az eszközre kapcsolati sztring, amelyet a telemetriai adatok küldésére vonatkozó rövid útmutató eszközregisztrálás szakaszában mentett.Keresse meg azt a kódsort, amely meghívja
IoTHubDeviceClient_LL_SetConnectionStatusCallback
, hogy regisztráljon egy kapcsolatállapot-visszahívási függvényt az üzenetküldési ciklus előtt. Adjon hozzá kódot az adott sorhoz az eszköz elosztott nyomkövetésének meghívásáhozIoTHubDeviceClient_LL_EnablePolicyConfiguration
és engedélyezéséhez:// 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)
A
IoTHubDeviceClient_LL_EnablePolicyConfiguration
függvény lehetővé teszi az ikereszközökön keresztül konfigurált adott IoT Hub-funkciók házirendjeinek használatát. Miután engedélyeztePOLICY_CONFIGURATION_DISTRIBUTED_TRACING
az extra kódsor használatát, az eszköz nyomkövetési viselkedése az ikereszközön végrehajtott elosztott nyomkövetési módosításokat fogja tükrözni.Ha a mintaalkalmazást úgy szeretné futtatni, hogy nem használja fel az összes kvótát, adjon hozzá egy másodperces késleltetést az üzenetküldési ciklus végén:
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);
Fordítás és futtatás
Nyissa meg a
iothub_ll_telemetry_sample
projektkönyvtárat a korábban létrehozott CMake könyvtárból (azure-iot-sdk-c/cmake
), és fordítsa le a mintát:cd iothub_client/samples/iothub_ll_telemetry_sample cmake --build . --target iothub_ll_telemetry_sample --config Debug
Futtassa az alkalmazást. Az eszköz olyan telemetriát küld, amely támogatja az elosztott nyomkövetést.
Debug/iothub_ll_telemetry_sample.exe
Futtassa az alkalmazást. A konzolablakban megfigyelheti az IoT Hubnak küldött üzeneteket.
A felhőből mintavételezési döntéseket fogadó ügyfélalkalmazások esetében próbálja ki a iothub_devicetwin_sample.c mintát az elosztott nyomkövetési mintaadattárban.
Megkerülő megoldás nem Microsoft-ügyfelek esetén
Az elosztott nyomkövetési funkció implementálása a C SDK használata nélkül összetettebb. Nem javasoljuk.
Először is implementálnia kell az összes IoT Hub protokollprimitívet az üzenetekben az IoT Hub-üzenetek létrehozása és olvasása című fejlesztői útmutatót követve. Ezután szerkessze az MQTT- és AMQP-üzenetek protokolltulajdonságokat, és adja hozzá tracestate
rendszertulajdonságként.
Ezek konkrétan a következők:
- MQTT esetén adja hozzá
%24.tracestate=timestamp%3d1539243209
az üzenettémakörhöz. Cserélje le1539243209
az üzenet létrehozási idejét Unix időbélyeg formátumban. Példaként tekintse meg a C SDK implementációját. - AZ AMQP-hez adja hozzá és
value("timestamp=1539243209")
adja hozzákey("tracestate")
üzenetjegyzetként. A referencia-implementációt a uamqp_messaging.c fájlban talál.
A tulajdonságot tartalmazó üzenetek százalékos arányának szabályozásához implementáljon logikát a felhő által kezdeményezett események, például az ikerfrissítések figyeléséhez.
Következő lépések
- Ha többet szeretne megtudni a mikroszolgáltatások általános elosztott nyomkövetési mintájáról, tekintse meg a Mikroszolgáltatás-architektúra mintáját: elosztott nyomkövetés.