Migrace time series Přehledy (TSI) Gen2 do Azure Data Exploreru

Poznámka:

Služba Time Series Přehledy (TSI) už nebude podporována po březnu 2025. Zvažte migraci stávajících prostředí TSI na alternativní řešení co nejdříve. Další informace o vyřazení a migraci najdete v naší dokumentaci.

Přehled

Doporučení pro migraci na vysoké úrovni

Funkce Stav Gen2 Doporučená migrace
Ingestování JSON z centra s plochou a zapouzdřením Příjem dat TSI ADX – OneClick Ingestování / Průvodce
Otevřít studené úložiště Účet úložiště zákazníka Průběžný export dat do externí tabulky zadané zákazníkem v ADLS
Připojení or PBI Privátní verze Preview Použijte Připojení or pobočkové ústředny ADX. Přepište TSQ na KQL ručně.
Konektor Spark Privátní verze Preview: Dotazování telemetrických dat Dotazování na data modelu Migrace dat do ADX Použijte konektor ADX Spark pro telemetrická data a model exportu do FORMÁTU JSON a načtěte ho ve Sparku. Přepište dotazy v KQL.
Hromadné nahrávání Privátní verze Preview Používejte ADX OneClick Ingest a LightIngest. Volitelně můžete nastavit dělení v rámci ADX.
Model služby Time Series Dá se exportovat jako soubor JSON. Lze importovat do ADX, aby bylo možné provádět spojení v KQL.
Průzkumník TSI Přepínání teplé a studené Řídicí panely ADX
Dotazovací jazyk Dotazy časových řad (TSQ) Přepište dotazy v KQL. Místo sad SDK kusto použijte sady SDK.

Migrace telemetrie

Pomocí PT=Time složky v účtu úložiště načtěte kopii všech telemetrických dat v prostředí. Další informace najdete v tématu Úložiště dat.

Migrace – krok 1 – získání statistik o telemetrických datech

Data

  1. Přehled env
    • Záznam ID prostředí z první části plně kvalifikovaného názvu domény aplikace Data Access (například d390b0b0-1445-4c0c-8365-68d6382c1c2a From .env.crystal-dev.windows-int.net)
  2. Přehled env –> Konfigurace úložiště –> Účet úložiště
  3. Získání statistik složek pomocí Průzkumník služby Storage
    • Velikost záznamu a počet objektů PT=Time blob složky Pro zákazníky v privátní verzi Preview hromadného importu také velikost záznamu PT=Import a počet objektů blob.

Krok 2 migrace – Migrace telemetrie do ADX

Vytvoření clusteru ADX

  1. Pomocí nástroje pro odhad nákladů ADX definujte velikost clusteru na základě velikosti dat.

    1. Z metrik služby Event Hubs (nebo IoT Hub) načtěte míru, kolik dat se ingestuje za den. Z účtu úložiště připojeného k prostředí TSI načtěte, kolik dat v kontejneru objektů blob používá TSI. Tyto informace se použijí k výpočtu ideální velikosti clusteru ADX pro vaše prostředí.
    2. Otevřete Nástroj pro odhad nákladů v Azure Data Exploreru a vyplňte existující pole nalezenými informacemi. Nastavte "Typ úlohy" jako "Optimalizováno pro úložiště" a "Horká data" s celkovým objemem dat aktivně dotazovaných.
    3. Jakmile poskytnete všechny informace, azure Data Explorer Cost Estimator navrhne velikost virtuálního počítače a počet instancí pro váš cluster. Analyzujte, jestli se velikost aktivně dotazovaných dat vejde do horké mezipaměti. Vynásobte počet instancí navrhovaných velikostí mezipaměti velikosti virtuálního počítače podle příkladu:
      • Návrh odhadu nákladů: 9x DS14 + 4 TB (mezipaměť)
      • Celková doporučená horká mezipaměť: 36 TB = [9x (instance) x 4 TB (horká mezipaměť na uzel)]
    4. Další faktory, které je potřeba vzít v úvahu:
      • Růst prostředí: Při plánování velikosti clusteru ADX zvažte růst dat v čase.
      • Hydrace a dělení: Při definování počtu instancí v clusteru ADX zvažte další uzly (o 2 až 3x), které urychlují hydraci a dělení.
      • Další informace o výběru výpočetních prostředků najdete v tématu Výběr správné skladové položky výpočetních prostředků pro cluster Azure Data Exploreru.
  2. Pokud chcete co nejlépe monitorovat cluster a příjem dat, měli byste povolit diagnostické Nastavení a odesílat data do pracovního prostoru služby Log Analytics.

    1. V okně Azure Data Exploreru přejděte na Monitorování | Nastavení diagnostiky a kliknutí na Přidat nastavení diagnostiky

      Snímek obrazovky s oknem Monitorování Azure Data Exploreru | Nastavení diagnostiky

    2. Vyplňte následující:

      1. Název nastavení diagnostiky: Zobrazovaný název pro tuto konfiguraci
      2. Protokoly: Minimálně vyberte SucceededIngestion, FailedIngestion, IngestionBatching
      3. Vyberte pracovní prostor služby Log Analytics, do které chcete data odeslat (pokud ho ještě nemáte, musíte ho zřídit před tímto krokem).

      Snímek obrazovky s pracovním prostorem Služby Log Analytics v Azure Data Exploreru

  3. Dělení dat.

    1. U většiny datových sad stačí výchozí dělení ADX.
    2. Dělení dat je výhodné ve velmi konkrétní sadě scénářů a nemělo by se použít jinak:
      1. Zlepšení latence dotazů v sadách velkých objemů dat, kde většina dotazů filtruje sloupec řetězce s vysokou kardinalitou, např. ID časové řady.
      2. Při ingestování dat mimo pořadí, například když se události z minulosti mohou ingestovat dny nebo týdny po jejich generování v původu.
    3. Další informace najdete v zásadách dělení dat ADX.

Příprava na příjem dat

  1. Přejděte na https://dataexplorer.azure.com.

    Snímek obrazovky s cílovou stránkou Azure Data Exploreru

  2. Přejděte na kartu Data a vyberte Ingestovat z kontejneru objektů blob.

    Snímek obrazovky s příjmem dat z kontejneru objektů blob v Azure Data Exploreru

  3. Vyberte cluster, databázi a vytvořte novou tabulku s názvem, který zvolíte pro data TSI.

    Snímek obrazovky s výběrem clusteru, databáze a tabulky pro příjem dat v Azure Data Exploreru

  4. Vybrat další: Zdroj

  5. Na kartě Zdroj vyberte:

    1. Historická data
    2. "Vybrat kontejner"
    3. Volba účtu předplatného a úložiště pro vaše data TSI
    4. Volba kontejneru, který odpovídá vašemu prostředí TSI

    Snímek obrazovky s výběrem kontejneru pro příjem dat v Azure Data Exploreru

  6. Výběr možnosti Upřesnit nastavení

    1. Vzor času vytvoření: /'yyyMDDDHHmmssfff'_'
    2. Vzor názvu objektu blob: *.parquet
    3. Vyberte možnost Nečekat na dokončení příjmu dat.

    Snímek obrazovky s výběrem rozšířeného nastavení pro příjem dat v Azure Data Exploreru

  7. V části Filtry souborů přidejte cestu ke složce. V=1/PT=Time

    Snímek obrazovky s výběrem cesty ke složce pro příjem dat v Azure Data Exploreru

  8. Vybrat další: Schéma

    Poznámka:

    TSI použije při zachování sloupců v souborech Parquet některé zploštěné a uvozující. Další podrobnosti najdete na těchto odkazech: zploštěná pravidla a pravidla pro únik dat, aktualizace pravidel příjmu dat.

  • Pokud je schéma neznámé nebo se liší

    1. Odeberte všechny sloupce, které se často dotazují, a ponechte aspoň časové razítko a sloupce TSID.

      Snímek obrazovky s výběrem schématu pro příjem dat v Azure Data Exploreru

    2. Přidejte nový sloupec dynamického typu a namapujte ho na celý záznam pomocí $path.

      Snímek obrazovky s příjmem dat v Azure Data Exploreru pro dynamický typ

      Příklad:

      Snímek obrazovky s příkladem příjmu dat v Azure Data Exploreru pro dynamický typ

  • Pokud je schéma známé nebo opravené

    1. Ověřte, že data vypadají správně. V případě potřeby opravte všechny typy.
    2. Vybrat další: Souhrn

Zkopírujte příkaz LightIngest a uložte ho někam, abyste ho mohli použít v dalším kroku.

Snímek obrazovky s příjmem dat v Azure Data Exploreru pro příkaz Lightingest

Přijímání dat

Před ingestováním dat potřebujete nainstalovat nástroj LightIngest. Příkaz vygenerovaný nástrojem One-Click obsahuje token SAS. Nejlepší je vygenerovat nový, abyste měli kontrolu nad časem vypršení platnosti. Na portálu přejděte do kontejneru objektů blob pro prostředí TSI a vyberte sdílený přístupový token.

Snímek obrazovky s příjmem dat Azure Data Exploreru pro token SAS

Poznámka:

Před zahájením velkého příjmu dat se také doporučuje vertikálně navýšit kapacitu clusteru. Například D14 nebo D32 s 8 nebo více instancemi.

  1. Nastavte následující:

    1. Oprávnění: Čtení a seznam
    2. Platnost vypršela: Nastavte na období, které vám vyhovuje, že se migrace dat dokončí.

    Snímek obrazovky s příjmem dat Azure Data Exploreru pro vypršení platnosti oprávnění

  2. Vyberte možnost Generovat token SAS a adresu URL a zkopírujte adresu URL SAS objektu blob.

    Snímek obrazovky s příjmem dat Azure Data Exploreru pro adresu URL objektu blob SAS

  3. Přejděte na příkaz LightIngest, který jste zkopírovali dříve. Nahraďte parametr -source v příkazu touto adresou URL objektu blob SAS.

  4. Možnost 1: Ingestování všech dat V menších prostředích můžete ingestovat všechna data jediným příkazem.

    1. Otevřete příkazový řádek a přejděte do adresáře, do kterého byl extrahován nástroj LightIngest. Tam vložte příkaz LightIngest a spusťte ho.

    Snímek obrazovky s příjmem dat Azure Data Exploreru pro příkazový řádek

  5. Možnost 2: Ingestování dat podle roku nebo měsíce Pokud chcete větší prostředí nebo otestovat menší datovou sadu, můžete příkaz Lightingest dále filtrovat.

    1. Podle roku: Změna parametru -prefix

      • Před: -prefix:"V=1/PT=Time"
      • Po: -prefix:"V=1/PT=Time/Y=<Year>"
      • Příklad: -prefix:"V=1/PT=Time/Y=2021"
    2. Podle měsíce: Změna parametru -prefix

      • Před: -prefix:"V=1/PT=Time"
      • Po: -prefix:"V=1/PT=Time/Y=<Year>/M=<month #>"
      • Příklad: -prefix:"V=1/PT=Time/Y=2021/M=03"

Jakmile příkaz upravíte, spusťte ho podobně jako výše. Jeden z dokončení příjmu dat (pomocí možnosti monitorování níže) upravte příkaz pro příští rok a měsíc, který chcete ingestovat.

Monitorování příjmu dat

Příkaz LightIngest obsahoval příznak -dontWait, takže samotný příkaz nebude čekat na dokončení příjmu dat. Nejlepší způsob, jak sledovat průběh, zatímco probíhá, je využít kartu "Přehledy" na portálu. Otevřete oddíl clusteru Azure Data Exploreru na portálu a přejděte na Monitorování | Přehledy'

Snímek obrazovky s příjmem dat Azure Data Exploreru pro monitorování Přehledy

K monitorování příjmu dat můžete použít část Příjem dat (Preview) s níže postupem sledování příjmu dat.

  • Časový rozsah: Posledních 30 minut
  • Podívejte se na úspěšné a podle tabulky
  • Pokud máte nějaké chyby, podívejte se na selhání a podle tabulky.

Snímek obrazovky s příjmem dat Azure Data Exploreru pro výsledky monitorování

Jakmile uvidíte, že se metriky pro vaši tabulku přejdou na 0, budete vědět, že příjem dat je hotový. Pokud chcete zobrazit další podrobnosti, můžete použít Log Analytics. V části clusteru Azure Data Exploreru vyberte na kartě Protokol:

Snímek obrazovky s příjmem dat Azure Data Exploreru pro protokoly monitorování

Užitečné dotazy

Vysvětlení schématu při použití dynamického schématu

| project p=treepath(fullrecord)
| mv-expand p 
| summarize by tostring(p)

Přístup k hodnotám v poli

| where id_string == "a"
| summarize avg(todouble(fullrecord.['nestedArray_v_double'])) by bin(timestamp, 1s)  
| render timechart 

Migrace modelu time series (TSM) do Azure Data Exploreru

Model si můžete stáhnout ve formátu JSON z prostředí TSI pomocí uživatelského rozhraní PRŮZKUMNÍKa TSI nebo rozhraní API služby TSM Batch. Model pak můžete importovat do jiného systému, jako je Azure Data Explorer.

  1. Stáhněte si TSM z uživatelského prostředí TSI.

  2. Odstraňte první tři řádky pomocí VSCode nebo jiného editoru.

    Snímek obrazovky s migrací TSM do Azure Data Exploreru – Odstranění prvních 3 řádků

  3. Pomocí VSCode nebo jiného editoru vyhledejte a nahraďte výraz regex \},\n \{}{

    Snímek obrazovky s migrací TSM do Azure Data Exploreru – vyhledání a nahrazení

  4. Ingestování ve formátu JSON do ADX jako samostatné tabulky pomocí funkce Nahrát ze souboru

    Snímek obrazovky s migrací TSM do Azure Data Exploreru – Ingestování ve formátu JSON

Překlad dotazů časových řad (TSQ) do KQL

GetEvents

{
  "getEvents": {
    "timeSeriesId": [
      "assest1",
      "siteId1",
      "dataId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:0.0000000Z",
      "to": "2021-11-05T00:00:00.000000Z"
    },
    "inlineVariables": {},
  }
}
events
| where timestamp >= datetime(2021-11-01T00:00:0.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.000000Z)
| where assetId_string == "assest1" and siteId_string == "siteId1" and dataid_string == "dataId1"
| take 10000

GetEvents s filtrem

{
  "getEvents": {
    "timeSeriesId": [
      "deviceId1",
      "siteId1",
      "dataId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:0.0000000Z",
      "to": "2021-11-05T00:00:00.000000Z"
    },
    "filter": {
      "tsx": "$event.sensors.sensor.String = 'status' AND $event.sensors.unit.String = 'ONLINE"
    }
  }
} 
events
| where timestamp >= datetime(2021-11-01T00:00:0.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.000000Z)
| where deviceId_string== "deviceId1" and siteId_string == "siteId1" and dataId_string == "dataId1"
| where ['sensors.sensor_string'] == "status" and ['sensors.unit_string'] == "ONLINE"
| take 10000

GetEvents s projektovanou proměnnou

{
  "getEvents": {
    "timeSeriesId": [
      "deviceId1",
      "siteId1",
      "dataId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:0.0000000Z",
      "to": "2021-11-05T00:00:00.000000Z"
    },
    "inlineVariables": {},
    "projectedVariables": [],
    "projectedProperties": [
      {
        "name": "sensors.value",
        "type": "String"
      },
      {
        "name": "sensors.value",
        "type": "bool"
      },
      {
        "name": "sensors.value",
        "type": "Double"
      }
    ]
  }
}	 
events
| where timestamp >= datetime(2021-11-01T00:00:0.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.000000Z)
| where deviceId_string== "deviceId1" and siteId_string == "siteId1" and dataId_string == "dataId1"
| take 10000
| project timestamp, sensorStringValue= ['sensors.value_string'], sensorBoolValue= ['sensors.value_bool'], sensorDoublelValue= ['sensors.value_double']

AggregateSeries

{
  "aggregateSeries": {
    "timeSeriesId": [
      "deviceId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:00.0000000Z",
      "to": "2021-11-05T00:00:00.0000000Z"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "sensor": {
        "kind": "numeric",
        "value": {
          "tsx": "coalesce($event.sensors.value.Double, todouble($event.sensors.value.Long))"
        },
        "aggregation": {
          "tsx": "avg($value)"
        }
      }
    },
    "projectedVariables": [
      "sensor"
    ]
  }	
events
| where timestamp >= datetime(2021-11-01T00:00:00.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.0000000Z)
| where  deviceId_string == "deviceId1"
| summarize avgSensorValue= avg(coalesce(['sensors.value_double'], todouble(['sensors.value_long']))) by bin(IntervalTs = timestamp, 1m)
| project IntervalTs, avgSensorValue

AggregateSeries s filtrem

{
  "aggregateSeries": {
    "timeSeriesId": [
      "deviceId1"
    ],
    "searchSpan": {
      "from": "2021-11-01T00:00:00.0000000Z",
      "to": "2021-11-05T00:00:00.0000000Z"
    },
    "filter": {
      "tsx": "$event.sensors.sensor.String = 'heater' AND $event.sensors.location.String = 'floor1room12'"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "sensor": {
        "kind": "numeric",
        "value": {
          "tsx": "coalesce($event.sensors.value.Double, todouble($event.sensors.value.Long))"
        },
        "aggregation": {
          "tsx": "avg($value)"
        }
      }
    },
    "projectedVariables": [
      "sensor"
    ]
  }
}	
events
| where timestamp >= datetime(2021-11-01T00:00:00.0000000Z) and timestamp < datetime(2021-11-05T00:00:00.0000000Z)
| where  deviceId_string == "deviceId1"
| where ['sensors.sensor_string'] == "heater" and ['sensors.location_string'] == "floor1room12"
| summarize avgSensorValue= avg(coalesce(['sensors.value_double'], todouble(['sensors.value_long']))) by bin(IntervalTs = timestamp, 1m)
| project IntervalTs, avgSensorValue

Migrace z Připojení oru TSI Power BI na Připojení or ADX Power BI

Ruční kroky, které jsou součástí této migrace, jsou

  1. Převod dotazu Power BI na TSQ
  2. Převod dotazu TSQ na KQL Power BI na TSQ: Dotaz Power BI zkopírovaný z Průzkumníka uživatelských rozhraní TSI vypadá takto, jak je znázorněno níže.

Pro nezpracovaná data (rozhraní API GetEvents)

{"storeType":"ColdStore","isSearchSpanRelative":false,"clientDataType":"RDX_20200713_Q","environmentFqdn":"6988946f-2b5c-4f84-9921-530501fbab45.env.timeseries.azure.com", "queries":[{"getEvents":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"take":250000}}]}
  • Pokud ho chcete převést na TSQ, vytvořte json z výše uvedené datové části. Dokumentace k rozhraní API GetEvents obsahuje také příklady, které vám pomůžou lépe porozumět. Dotaz – Provedení – REST API (azure Time Series Přehledy) | Microsoft Docs
  • Převedený příkaz TSQ vypadá takto, jak je znázorněno níže. Jedná se o datovou část JSON uvnitř "dotazů".
{
  "getEvents": {
    "timeSeriesId": [
      "Arctic Ocean",
      "null"
    ],
    "searchSpan": {
      "from": "2019-10-31T23:59:39.590Z",
      "to": "2019-11-01T05:22:18.926Z"
    },
    "take": 250000
  }
}

Pro agregaci dat (rozhraní API agregované řady)

  • U jedné vložené proměnné vypadá dotaz PowerBI z Průzkumníka uživatelských rozhraní TSI takto:
{"storeType":"ColdStore","isSearchSpanRelative":false,"clientDataType":"RDX_20200713_Q","environmentFqdn":"6988946f-2b5c-4f84-9921-530501fbab45.env.timeseries.azure.com", "queries":[{"aggregateSeries":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"interval":"PT1M", 		"inlineVariables":{"EventCount":{"kind":"aggregate","aggregation":{"tsx":"count()"}}},"projectedVariables":["EventCount"]}}]}
{
  "aggregateSeries": {
    "timeSeriesId": [
      "Arctic Ocean",
      "null"
    ],
    "searchSpan": {
      "from": "2019-10-31T23:59:39.590Z",
      "to": "2019-11-01T05:22:18.926Z"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "EventCount": {
        "kind": "aggregate",
        "aggregation": {
          "tsx": "count()"
        }
      }
    },
    "projectedVariables": [
      "EventCount",
    ]
  }
}
  • Pro více než jednu vloženou proměnnou připojte json do "inlineVariables", jak je znázorněno v následujícím příkladu. Dotaz Power BI pro více než jednu vloženou proměnnou vypadá takto:
{"storeType":"ColdStore","isSearchSpanRelative":false,"clientDataType":"RDX_20200713_Q","environmentFqdn":"6988946f-2b5c-4f84-9921-530501fbab45.env.timeseries.azure.com","queries":[{"aggregateSeries":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"interval":"PT1M", "inlineVariables":{"EventCount":{"kind":"aggregate","aggregation":{"tsx":"count()"}}},"projectedVariables":["EventCount"]}}, {"aggregateSeries":{"searchSpan":{"from":"2019-10-31T23:59:39.590Z","to":"2019-11-01T05:22:18.926Z"},"timeSeriesId":["Arctic Ocean",null],"interval":"PT1M", "inlineVariables":{"Magnitude":{"kind":"numeric","value":{"tsx":"$event['mag'].Double"},"aggregation":{"tsx":"max($value)"}}},"projectedVariables":["Magnitude"]}}]}

{
  "aggregateSeries": {
    "timeSeriesId": [
      "Arctic Ocean",
      "null"
    ],
    "searchSpan": {
      "from": "2019-10-31T23:59:39.590Z",
      "to": "2019-11-01T05:22:18.926Z"
    },
    "interval": "PT1M",
    "inlineVariables": {
      "EventCount": {
        "kind": "aggregate",
        "aggregation": {
          "tsx": "count()"
        }
      },
      "Magnitude": {
        "kind": "numeric",
        "value": {
          "tsx": "$event['mag'].Double"
        },
        "aggregation": {
          "tsx": "max($value)"
        }
      }
    },
    "projectedVariables": [
      "EventCount",
      "Magnitude",
    ]
  }
}
  • Pokud chcete dotazovat nejnovější data("isSearchSpanRelative": true), ručně vypočítejte searchSpan, jak je uvedeno níže.
    • Najděte rozdíl mezi datovou částí Power BI a "to". Pojďme tento rozdíl volat jako "D", kde "D" = "from" - "to"
    • Vezměte aktuální časové razítko ("T") a odečtěte rozdíl získaný v prvním kroku. Bude nový "from"(F) vyhledávacího pole, kde "F" = "T" - "D"
    • Nyní je nový "from" získaný v kroku 2 a nový "to" je "T"(aktuální časové razítko)