Guide de migration : Elasticsearch vers Azure Data Explorer
Dans ce guide, vous allez apprendre à migrer vos données Elasticsearch vers Azure Data Explorer à l’aide de Logstash.
Dans ce guide, les données à migrer se situent dans un index Elasticsearch nommé véhicule qui a le schéma de données suivant :
{
"Manufacturer": "string",
"Model": "string",
"ReleaseYear": "int",
"ReleaseDate": "datetime"
}
Prérequis
Pour migrer vos données Elasticsearch vers Azure Data Explorer, vous avez besoin des éléments suivants :
- Un compte Microsoft ou une identité utilisateur Microsoft Entra. Un abonnement Azure n’est pas requis.
- Un cluster et une base de données Azure Data Explorer. Vous pouvez créer un cluster gratuit ou créer un cluster complet. Pour déterminer qui est le meilleur pour vous, vérifiez la comparaison des fonctionnalités.
- ID d’application et autorisations déléguées pour accéder à votre cluster Azure Data Explorer. Pour plus d’informations, consultez Créer une application Microsoft Entra. Vous avez besoin d’ID d’application, de secret et d’ID de locataire pour configurer le pipeline Logstash.
- Instructions d’installation pour Logstash version 6+
Prémigration
Une fois les prérequis satisfaits, vous êtes prêt à découvrir la topologie de votre environnement et à évaluer la faisabilité de votre migration vers le cloud Azure.
Créer un schéma cible dans votre cluster Azure Data Explorer
Pour ingérer et structurer correctement les données pour l’interrogation et l’analyse, vous devez créer un schéma de table et un mappage dans votre cluster Azure Data Explorer.
Le schéma de la table et les données en cours de migration doivent correspondre. Le mappage d’ingestion est important pour établir le mappage des colonnes sources dans ELK aux colonnes cibles de votre table.
Pour créer un schéma de table et un mappage d’ingestion dans votre cluster :
Connectez-vous à l’interface utilisateur web d’Azure Data Explorer.
Ajoutez une connexion à votre cluster.
Sélectionnez la base de données dans laquelle vous souhaitez créer le schéma de table pour les données de migration.
Exécutez la commande suivante dans la fenêtre de requête de votre base de données pour créer un schéma de table.
.create tables Vehicle ( Manufacturer: string, Model: string, ReleaseYear: int, ReleaseDate: datetime )
Exécutez la commande suivante pour créer un mappage d’ingestion.
.create table Vehicle ingestion json mapping 'VechicleMapping' '[' ' {"column":"Manufacturer", "path":"$.manufacturer"},' ' {"column":"Model", "path":"$.model"},' ' {"column":"ReleaseYear", "path":"$.releaseYear"},' ' {"column":"ReleaseDate", "path":"$.releaseDate"}' ']'
Préparer Logstash pour la migration
Lors de la migration de données vers votre cluster Azure Data Explorer, il est important de configurer correctement un pipeline Logstash. Le pipeline garantit que les données sont correctement mises en forme et transférées vers la table cible.
Si vous devez déplacer des données à partir de plusieurs clusters ou index Elasticsearch, vous pouvez créer plusieurs sections d’entrée dans le fichier de configuration du pipeline. Pour ce faire, vous pouvez définir une section d’entrée pour chaque cluster ou index Elasticsearch et les classer à l’aide de balises si vous le souhaitez. Ensuite, vous pouvez utiliser ces balises dans les instructions conditionnelles de la section sortie pour diriger ces jeux de données vers des tables de cluster Azure Data Explorer spécifiques
Pour configurer un pipeline Logstash :
Dans un interpréteur de commandes, accédez au répertoire racine Logstash, puis exécutez la commande suivante pour installer le plug-in de sortie Logstash. Pour plus d’informations sur le plug-in, consultez Ingestion de données à partir de Logstash.
bin/logstash-plugin install logstash-output-kusto
Créez un fichier de configuration de pipeline Logstash à l’aide des paramètres suivants :
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 } }
Paramètres d'entrée
Nom du paramètre Description Hôtes URL du cluster Elasticsearch. index Nom de l’index à migrer. query Requête facultative pour obtenir des données spécifiques à partir de l’index. utilisateur Nom d’utilisateur pour se connecter au cluster Elasticsearch. mot de passe Mot de passe pour se connecter au cluster Elasticsearch. balises Balises facultatives pour identifier la source des données. Par exemple, spécifiez tags => ["vehicle"]
dans la section elasticsearch, puis filtrez à l’aideif "vehicle" in [tags] { ... }
de l’habillage de la section kusto.ssl Spécifie si un certificat SSL est requis. ca_file Fichier de certificat à transmettre pour l’authentification. Paramètres de filtre
Le filtre ruby empêche l’ingestion de données en double dans votre cluster en définissant un horodatage unique pour les fichiers de données Elasticsearch toutes les 10 secondes. Il s’agit d’une bonne pratique qui segmente les données dans des fichiers avec un horodatage unique, ce qui garantit que les données sont correctement traitées pour la migration.
Paramètres de sortie
Nom du paramètre Description path Le plug-in Logstash écrit des événements dans des fichiers temporaires avant de les envoyer à votre cluster. Ce paramètre décrit le chemin d’accès à l’emplacement où les fichiers temporaires sont enregistrés et une expression de temps pour la rotation des fichiers afin de déclencher des chargements sur votre cluster. ingest_url Point de terminaison de cluster pour la communication liée à l’ingestion. app_id, app_key et app_tenant Informations d’identification requises pour se connecter à votre cluster. Veillez à utiliser une application avec des privilèges d’ingestion. Pour plus d’informations, consultez Prérequis. database Nom de la base de données où placer des événements. table Nom de la table cible où placer des événements. json_mapping Le mappage est utilisé pour mapper une chaîne json d’événement entrante au format de ligne correct (définit la propriété ELK qui entre dans la colonne de schéma de table).
Migration
Une fois que vous avez terminé de préparer vos étapes de pré-migrations, l’étape suivante consiste à exécuter le processus de migration. Il est important de surveiller le pipeline pendant le processus de migration des données pour s’assurer qu’il s’exécute correctement et afin de pouvoir résoudre les problèmes qui peuvent survenir.
Pour migrer vos données, dans un interpréteur de commandes, accédez au répertoire racine Logstash, puis exécutez la commande suivante :
bin/logstash -f <your_pipeline>.conf
Vous devriez voir les informations imprimées à l’écran.
Post-migration
Une fois la migration terminée, vous devez passer par une série de tâches post-migration pour valider les données et vous assurer que tout fonctionne aussi bien et efficacement que possible.
Le processus de validation des données pour un index spécifique se compose généralement des activités suivantes :
Comparaison des données : comparez les données migrées dans votre cluster Azure Data Explorer aux données d’origine dans Elasticsearch. Vous pouvez le faire à l’aide d’un outil tel que Kibana dans la pile ELK qui vous permet d’interroger et de visualiser les données dans les deux environnements.
Exécution des requêtes : exécutez une série de requêtes sur les données migrées dans votre cluster Azure Data Explorer pour vous assurer que les données sont exactes et complètes. Cela inclut l’exécution de requêtes qui testent les relations entre différents champs et les requêtes qui testent l’intégrité des données.
Rechercher les données manquantes : comparez les données migrées dans votre cluster avec les données dans Elasticsearch pour rechercher les données manquantes, les données en double ou toute autre incohérence des données.
Validez les performances : testez les performances des données migrées dans votre cluster et comparez-les aux performances des données dans Elasticsearch. Cela peut inclure l’exécution de requêtes et la visualisation des données pour tester les temps de réponse et s’assurer que les données de votre cluster sont optimisées pour les performances.
Important
Répétez le processus de validation des données si des modifications sont apportées aux données migrées, ou à votre cluster, pour vous assurer que les données sont toujours exactes et complètes.
Voici quelques exemples de requêtes que vous pouvez exécuter pour valider les données de votre cluster :
Dans Elasticsearch, exécutez les requêtes suivantes pour obtenir :
// 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" } } } } }
Dans la fenêtre de requête de votre base de données, exécutez la requête correspondante suivante :
// 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
Comparez les résultats des deux ensembles de requêtes pour vous assurer que les données de votre cluster sont exactes et complètes.