Compartir a través de


Guía de migración: De Elasticsearch a Azure Data Explorer

En esta guía, aprenderá a migrar los datos de Elasticsearch a Azure Data Explorer mediante Logstash.

En esta guía, los datos que se van a migrar se encuentra en un índice de Elasticsearch denominado vehículo con el siguiente esquema de datos:

{
  "Manufacturer": "string",
  "Model": "string",
  "ReleaseYear": "int",
  "ReleaseDate": "datetime"
}

Requisitos previos

Para migrar los datos de Elasticsearch a Azure Data Explorer, necesita:

  • Una cuenta de Microsoft o una identidad de usuario de Microsoft Entra. No se necesita una suscripción a Azure.
  • Un clúster y la base de datos de Azure Data Explorer. Puede crear un clúster gratuito o crear un clúster completo. Para decidir cuál es el mejor para usted, compruebe la comparación de características.
  • Un identificador de aplicación y permisos delegados para acceder al clúster de Azure Data Explorer. Para obtener más información, consulte Creación de una aplicación de Microsoft Entra. Necesita el identificador de aplicación, el secreto y el identificador de inquilino para configurar la canalización de Logstash.
  • Instrucciones de instalación de la versión 6, o posteriores, de Logstash.

Antes de la migración

Una vez cumplidos los requisitos previos, estará listo para detectar la topología del entorno y evaluar la viabilidad de la migración a la nube de Azure.

Creación de un esquema de destino en el clúster de Azure Data Explorer

Para ingerir y estructurar correctamente los datos para realizar consultas y análisis, debe crear un esquema de tabla y una asignación en el clúster de Azure Data Explorer.

El esquema de la tabla y los datos que se van a migrar deben coincidir. La asignación de ingesta es importante establecer la asignación de las columnas de origen en ELK a las columnas de destino de la tabla.

Para crear un esquema de tabla y una asignación de ingesta en el clúster:

  1. Inicie sesión en la interfaz de usuario web de Azure Data Explorer.

  2. Agregue una conexión al clúster.

  3. Seleccione la base de datos donde desea crear el esquema de tabla para los datos de migración.

  4. Ejecute el siguiente comando en la ventana de consulta de base de datos para crear un esquema de tabla.

    .create tables Vehicle (
      Manufacturer: string,
      Model: string,
      ReleaseYear: int,
      ReleaseDate: datetime
      )
    
  5. Ejecute el comando siguiente para crear una asignación de ingesta.

    .create table Vehicle ingestion json mapping 'VechicleMapping'
      '['
      '  {"column":"Manufacturer", "path":"$.manufacturer"},'
      '  {"column":"Model", "path":"$.model"},'
      '  {"column":"ReleaseYear", "path":"$.releaseYear"},'
      '  {"column":"ReleaseDate", "path":"$.releaseDate"}'
      ']'
    

Preparación de Logstash para la migración

Al migrar datos al clúster de Azure Data Explorer, es importante configurar correctamente una canalización de Logstash. La canalización garantiza que los datos tienen el formato correcto y se transfieren a la tabla de destino.

Si necesita mover datos de varios clústeres o índices de Elasticsearch, puede crear varias secciones de entrada en el archivo de configuración de canalización. Para ello, puede definir una sección de entrada para cada clúster o índice de Elasticsearch y clasificarlas mediante etiquetas si lo desea. A continuación, puede usar estas etiquetas en instrucciones condicionales de la sección de salida para dirigir estos conjuntos de datos a tablas de clúster específicas de Azure Data Explorer.

Para configurar una canalización de Logstash:

  1. En un shell de comandos, vaya al directorio raíz logstash y ejecute el siguiente comando para instalar el complemento de salida Logstash. Para obtener más información sobre el complemento, consulte Ingesta de datos de Logstash.

    bin/logstash-plugin install logstash-output-kusto
    
  2. Cree un archivo de configuración de canalización de Logstash con la siguiente configuración:

    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
      }
    }
    

    Parámetros de entrada

    Nombre de parámetro Descripción
    Hosts Dirección URL del clúster de Elasticsearch.
    índice Nombre del índice que se va a migrar.
    query Consulta opcional para obtener datos específicos del índice.
    usuario Nombre de usuario para conectarse al clúster de Elasticsearch.
    password Contraseña para conectarse al clúster de Elasticsearch.
    etiquetas Etiquetas opcionales para identificar el origen de los datos. Por ejemplo, especifique tags => ["vehicle"] en la sección elasticsearch y, a continuación, filtre mediante if "vehicle" in [tags] { ... } el ajuste de la sección kusto .
    ssl Especifica si se requiere un certificado SSL.
    ca_file Archivo de certificado que se va a pasar para la autenticación.

    Parámetros de filtro

    El filtro ruby impide la ingesta de datos duplicados en el clúster estableciendo una marca de tiempo única para los archivos de datos de Elasticsearch cada 10 segundos. Se trata de un procedimiento recomendado que fragmenta los datos en archivos con una marca de tiempo única, lo que garantiza que los datos se procesan correctamente para la migración.

    Parámetros de salida

    Nombre de parámetro Descripción
    path El complemento Logstash escribe eventos en archivos temporales antes de enviarlos al clúster. Este parámetro describe la ruta de acceso a dónde se guardan los archivos temporales y una expresión de tiempo para que la rotación de archivos desencadene cargas en el clúster.
    ingest_url Punto de conexión del clúster para la comunicación relacionada con la ingesta.
    app_id, app_key y app_tenant Credenciales necesarias para conectarse al clúster. Asegúrese de usar una aplicación con privilegios de ingesta. Para obtener más información, consulte Requisitos previos.
    database Nombre de la base de datos en la que se colocan los eventos.
    table Nombre de la tabla de destino en la que se colocan los eventos.
    json_mapping La asignación se usa para asignar una cadena json de evento entrante al formato de fila correcto (define qué propiedad ELK entra en la columna de esquema de tabla).

Migración

Una vez que haya completado la preparación de los pasos previos a las migraciones, el siguiente paso es ejecutar el proceso de migración. Es importante supervisar la canalización durante el proceso de migración de datos para asegurarse de que se ejecuta sin problemas y para poder solucionar los problemas que puedan surgir.

Para migrar los datos, en un shell de comandos, vaya al directorio raíz de Logstash y, a continuación, ejecute el siguiente comando:

bin/logstash -f <your_pipeline>.conf

Debería ver información impresa en la pantalla.

Después de la migración

Una vez completada la migración, debe realizar una serie de tareas posteriores a la migración para validar los datos y asegurarse de que todo funciona de la forma más fluida y eficaz posible.

El proceso de validación de datos para un índice específico consta generalmente de las actividades siguientes:

Comparación de datos: compare los datos migrados del clúster de Azure Data Explorer con los datos originales de Elasticsearch. Puede hacerlo mediante una herramienta como Kibana en la pila ELK que le permite consultar y visualizar los datos en ambos entornos.

Ejecución de consultas: ejecute una serie de consultas en los datos migrados del clúster de Azure Data Explorer para asegurarse de que los datos son precisos y completos. Esto incluye la ejecución de consultas que prueban las relaciones entre distintos campos y las consultas que prueban la integridad de los datos.

Comprobar si faltan datos: compare los datos migrados del clúster con los datos de Elasticsearch para comprobar si faltan datos, datos duplicados o cualquier otra incoherencia de datos.

Validar el rendimiento: pruebe el rendimiento de los datos migrados en el clúster y compárelo con el rendimiento de los datos en Elasticsearch. Esto puede incluir consultas en ejecución y visualizar los datos para probar los tiempos de respuesta y asegurarse de que los datos del clúster están optimizados para el rendimiento.

Importante

Repita el proceso de validación de datos si se realizan cambios en los datos migrados o en el clúster para asegurarse de que los datos siguen siendo precisos y completos.

A continuación se muestran algunos ejemplos de consultas que puede ejecutar para validar los datos del clúster:

  1. En Elasticsearch, ejecute las siguientes consultas para obtener :

    // 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"
            }
          }
        }
      }
    }
    
  2. En la ventana de consulta de la base de datos, ejecute la siguiente consulta correspondiente:

    // 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
    
  3. Compare los resultados de ambos conjuntos de consultas para asegurarse de que los datos del clúster son precisos y completos.

Para más información sobre Azure Database Explorer, consulte:

Para más información sobre el marco y el ciclo de adopción de las migraciones en la nube, consulte: