Migreringsguide: Elasticsearch till Azure Data Explorer
I den här guiden får du lära dig hur du migrerar Elasticsearch-data till Azure Data Explorer med hjälp av Logstash.
I den här guiden finns de data som ska migreras i ett Elasticsearch-index med namnet vehicle som har följande dataschema:
{
"Manufacturer": "string",
"Model": "string",
"ReleaseYear": "int",
"ReleaseDate": "datetime"
}
Förutsättningar
Om du vill migrera Elasticsearch-data till Azure Data Explorer behöver du:
- Ett Microsoft-konto eller en Microsoft Entra användaridentitet. En Azure-prenumeration krävs inte.
- Ett Azure Data Explorer-kluster och en databas. Du kan skapa ett kostnadsfritt kluster eller skapa ett fullständigt kluster. Kontrollera funktionsjämförelsen för att avgöra vad som är bäst för dig.
- Ett app-ID och delegerade behörigheter för åtkomst till ditt Azure Data Explorer-kluster. Mer information finns i Skapa en Microsoft Entra app. Du behöver app-ID, hemlighet och klientorganisations-ID för att konfigurera Logstash-pipelinen.
- Logstash version 6+ Installationsinstruktioner.
Före migrering
När du har uppfyllt förutsättningarna är du redo att identifiera topologin i din miljö och utvärdera genomförbarheten av din Azure-molnmigrering.
Skapa målschema i azure Data Explorer-klustret
Om du vill mata in och strukturera data för frågor och analys på rätt sätt måste du skapa ett tabellschema och en mappning i azure-Data Explorer-klustret.
Schemat för tabellen och de data som migreras ska matcha. Inmatningsmappningen är viktig för att upprätta mappningen av källkolumnerna i ELK till målkolumnerna i tabellen.
Så här skapar du ett tabellschema och inmatningsmappning i klustret:
Logga in på Webbgränssnittet för Azure Data Explorer.
Lägg till en anslutning till klustret.
Välj den databas där du vill skapa tabellschemat för migreringsdata.
Kör följande kommando i databasfrågefönstret för att skapa ett tabellschema.
.create tables Vehicle ( Manufacturer: string, Model: string, ReleaseYear: int, ReleaseDate: datetime )
Kör följande kommando för att skapa en inmatningsmappning.
.create table Vehicle ingestion json mapping 'VechicleMapping' '[' ' {"column":"Manufacturer", "path":"$.manufacturer"},' ' {"column":"Model", "path":"$.model"},' ' {"column":"ReleaseYear", "path":"$.releaseYear"},' ' {"column":"ReleaseDate", "path":"$.releaseDate"}' ']'
Förbereda Logstash för migrering
När du migrerar data till ditt Azure Data Explorer-kluster är det viktigt att konfigurera en Logstash-pipeline korrekt. Pipelinen säkerställer att data formateras korrekt och överförs till måltabellen.
Om du behöver flytta data från flera Elasticsearch-kluster eller index kan du skapa flera indataavsnitt i pipelinekonfigurationsfilen. För att uppnå detta kan du definiera ett indataavsnitt för varje Elasticsearch-kluster eller index och kategorisera dem med hjälp av taggar om du vill. Sedan kan du använda dessa taggar i villkorssatser i utdataavsnittet för att dirigera dessa datauppsättningar till specifika Azure Data Explorer klustertabeller
Så här konfigurerar du en Logstash-pipeline:
I ett kommandogränssnitt navigerar du till Logstash-rotkatalogen och kör sedan följande kommando för att installera logstash-utdata-plugin-programmet. Mer information om plugin-programmet finns i Mata in data från Logstash.
bin/logstash-plugin install logstash-output-kusto
Skapa en Logstash-pipelinekonfigurationsfil med hjälp av följande inställningar:
input { elasticsearch { hosts => "http://localhost:9200" index => "vehicle" query => '{ "query": { "range" : { "releaseDate": { "gte": "2019-01-01", "lte": "2023-12-31" }}}}' user => "<elasticsearch_username>" password => "<elasticsearch_password>" ssl => true ca_file => "<certification_file>" } } filter { ruby { code => "event.set('[@metadata][timebucket]', Time.now().to_i/10)" } } output { kusto { path => "/tmp/region1/%{+YYYY-MM-dd}-%{[@metadata][timebucket]}.txt" ingest_url => "https://ingest-<azure_data_explorer_cluster_name>.<region>.kusto.windows.net" app_id => "<app_id>" app_key => "<app_secret>" app_tenant => "<app_tenant_id>" database => "<your_database>" table => "Vehicle" // The table schema you created earlier json_mapping => "vehicleMapping" // The ingestion mapping you created earlier } }
Indataparametrar
Parameternamn Beskrivning Värdar URL:en för Elasticsearch-klustret. Index Namnet på indexet som ska migreras. Fråga Valfri fråga för att hämta specifika data från indexet. användare Användarnamn för att ansluta till Elasticsearch-kluster. lösenord Lösenord för att ansluta till Elasticsearch-kluster. Taggar Valfria taggar för att identifiera datakällan. Ange till exempel tags => ["vehicle"]
i avsnittet elasticsearch och filtrera sedan med hjälp avif "vehicle" in [tags] { ... }
omslutning av kusto-avsnittet .Ssl Anger om ett SSL-certifikat krävs. ca_file Certifikatfilen som ska skickas för autentisering. Filtrera parametrar
Ruby-filtret förhindrar att dubbletter av data matas in i klustret genom att ange en unik tidsstämpel för Elasticsearch-datafiler var tionde sekund. Det här är en metod att segmentera data i filer med en unik tidsstämpel, vilket säkerställer att data bearbetas korrekt för migrering.
Utdataparametrar
Parameternamn Beskrivning Sökvägen Logstash-plugin-programmet skriver händelser till temporära filer innan de skickas till klustret. Den här parametern beskriver sökvägen till var temporära filer sparas och ett tidsuttryck för filrotation som utlöser uppladdningar till klustret. ingest_url Klusterslutpunkten för inmatningsrelaterad kommunikation. app_id, app_key och app_tenant Autentiseringsuppgifter som krävs för att ansluta till klustret. Kontrollera att du använder ett program med inmatningsbehörigheter. Mer information finns i Förutsättningar. Databas Databasnamnet för att placera händelser. table Måltabellnamnet för att placera händelser. json_mapping Mappning används för att mappa en json-sträng för inkommande händelser till rätt radformat (definierar vilken ELK-egenskap som går till vilken tabellschemakolumn).
Migrering
När du har slutfört förberedelserna inför migreringsstegen är nästa steg att köra migreringsprocessen. Det är viktigt att övervaka pipelinen under datamigreringsprocessen för att säkerställa att den fungerar smidigt och så att du kan åtgärda eventuella problem som kan uppstå.
Om du vill migrera dina data går du till Logstash-rotkatalogen i ett kommandogränssnitt och kör sedan följande kommando:
bin/logstash -f <your_pipeline>.conf
Du bör se information som skrivs ut på skärmen.
Efter migreringen
När migreringen är klar måste du gå igenom en serie uppgifter efter migreringen för att verifiera data och se till att allt fungerar så smidigt och effektivt som möjligt.
Processen för datavalidering för ett specifikt index består vanligtvis av följande aktiviteter:
Datajämförelse: Jämför migrerade data i azure-Data Explorer-klustret med ursprungliga data i Elasticsearch. Du kan göra detta med hjälp av ett verktyg som Kibana i ELK-stacken som gör att du kan köra frågor mot och visualisera data i båda miljöerna.
Frågekörning: Kör en serie frågor mot migrerade data i azure-Data Explorer-klustret för att säkerställa att data är korrekta och fullständiga. Detta inkluderar att köra frågor som testar relationerna mellan olika fält och frågor som testar dataintegriteten.
Sök efter data som saknas: Jämför migrerade data i klustret med data i Elasticsearch för att söka efter saknade data, duplicerade data eller andra datainkonsekvenser.
Verifiera prestandan: Testa prestanda för migrerade data i klustret och jämför dem med prestanda för data i Elasticsearch. Detta kan omfatta körning av frågor och visualisering av data för att testa svarstiderna och säkerställa att data i klustret är optimerade för prestanda.
Viktigt
Upprepa datavalideringsprocessen om några ändringar görs i de migrerade data, eller klustret, för att säkerställa att data fortfarande är korrekta och slutförda.
Följande är några exempel på frågor som du kan köra för att verifiera data i klustret:
I Elasticsearch kör du följande frågor för att hämta :
// Gets the total record count of the index GET vehicle/_count // Gets the total record count of the index based on a datetime query GET vehicle/_count { "query": { "range" : { "releaseDate": { "gte": "2021-01-01", "lte": "2021-12-31" } } } } // Gets the count of all vehicles that has manufacturer as "Honda". GET vehicle/_count { "query": { "bool" : { "must" : { "term" : { "manufacturer" : "Honda" } } } } } // Get the record count where a specific property doesn't exist. // This is helpful especially when some records don't have NULL properties. GET vehicle/_count { "query": { "bool": { "must_not": { "exists": { "field": "description" } } } } }
Kör följande motsvarande fråga i databasfrågefönstret:
// Gets the total record count in the table Vehicle | count // Gets the total record count where a given property is NOT empty/null Vehicle | where isnotempty(Manufacturer) // Gets the total record count where a given property is empty/null Vehicle | where isempty(Manufacturer) // Gets the total record count by a property value Vehicle | where Manufacturer == "Honda" | count
Jämför resultaten från båda uppsättningarna med frågor för att säkerställa att data i klustret är korrekta och fullständiga.