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 nem rendelkezik ilyen eszközzel, kövesse az új eszköz regisztrálása az IoT Hubon című témakör lépéseit, és mentse az eszközt kapcsolati sztring a cikkben való használathoz.

  • 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:

  1. Üzenet jön létre az IoT-eszközön.
  2. 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.
  3. Az SDK hozzáad egy tracestate értéket az üzenettulajdonsághoz, amely tartalmazza az üzenet létrehozásának időbélyegét.
  4. Az IoT-eszköz elküldi az üzenetet az IoT Hubnak.
  5. Az üzenet az IoT Hub-átjáróra érkezik.
  6. 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 egyedi trace-id értéket az üzenethez, és egy span-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ési DiagnosticIoTHubD2C naplóiban rögzíti.
  7. 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.
  8. 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 ugyanazzal trace-id az DiagnosticIoTHubEgress é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.

  1. Nyissa meg az IoT Hubot az Azure Portalon.

  2. 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.

  3. Válassza a Diagnosztikai beállítások megadása lehetőséget.

  4. 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 DistributedTracing Gépház értéket.

    Képernyőkép arról, hogy hol adhat hozzá nevet a diagnosztikai beállításokhoz.

  5. 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.
  6. 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.

    Képernyőkép arról, hogy hol található az elosztott nyomkövetési művelet az IoT Hub diagnosztikai beállításaihoz.

  7. Válassza a Mentés lehetőséget.

  8. (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.

  1. 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.

  2. Válassza ki az eszközt.

  3. Válassza a fogaskerék ikont az Elosztott nyomkövetés (előzetes verzió) területen. A megnyíló panelen:

    1. Válassza az Engedélyezés lehetőséget.
    2. Mintavételezési arány esetén válasszon 0 és 100 közötti százalékot.
    3. Válassza a Mentés lehetőséget.

    Képernyőkép az elosztott nyomkövetés engedélyezéséről az Azure Portalon.

  4. 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 ( 0100 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

  1. Telepítse az asztali fejlesztést C++ számítási feladattal a Visual Studio 2022-hez. A Visual Studio 2019 is támogatott.

  2. 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.

  3. 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.

  4. Alkönyvtár létrehozásához cmake futtassa a következő parancsokat a azure-iot-sdk-c könyvtárból, és lépjen a cmake 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.

  1. 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.

  2. 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.

  3. 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ához IoTHubDeviceClient_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élyezte POLICY_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.

  4. 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

  1. 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
    
  2. 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
    
  3. 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 le 1539243209 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