Compartilhar via


Guia de migração: Elasticsearch para o Azure Data Explorer

Neste guia, você aprenderá a migrar seus dados do Elasticsearch para o Azure Data Explorer usando o Logstash.

Neste guia, os dados a serem migrados estão em um índice do Elasticsearch chamado vehicle que tem o seguinte esquema de dados:

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

Pré-requisitos

Para migrar seus dados do Elasticsearch para o Azure Data Explorer, você precisa:

  • Uma conta Microsoft ou uma identidade de usuário do Microsoft Entra. Uma assinatura do Azure não é necessária.
  • Um cluster e um banco de dados do Azure Data Explorer. Você pode criar um cluster gratuito ou criar um cluster completo. Para decidir qual é o melhor para você, verifique a comparação de recursos.
  • Uma ID de aplicativo e permissões delegadas para acessar o cluster do Azure Data Explorer. Para obter mais informações, consulte Criar um aplicativo do Microsoft Entra. Você precisa da ID do aplicativo, do segredo e da ID do locatário para configurar o pipeline do Logstash.
  • Instruções de instalação do Logstash versão 6+.

Pré-migração

Depois de você cumprir esses pré-requisitos, tudo estará pronto para descobrir a topologia do ambiente e avaliar a viabilidade da migração de nuvem do Azure.

Criar esquema de destino no cluster do Azure Data Explorer

Para ingerir e estruturar corretamente os dados para consulta e análise, você precisa criar um esquema de tabela e um mapeamento no cluster do Azure Data Explorer.

O esquema da tabela e os dados que estão sendo migrados devem corresponder. O mapeamento de ingestão é importante para estabelecer o mapeamento das colunas de origem no ELK para as colunas de destino em sua tabela.

Para criar um esquema de tabela e um mapeamento de ingestão no cluster:

  1. Entre na interface do usuário da Web do Azure Data Explorer.

  2. Adicione uma conexão ao cluster.

  3. Selecione o banco de dados em que você deseja criar o esquema de tabela para os dados de migração.

  4. Execute o comando a seguir na janela de consulta do banco de dados para criar um esquema de tabela.

    .create tables Vehicle (
      Manufacturer: string,
      Model: string,
      ReleaseYear: int,
      ReleaseDate: datetime
      )
    
  5. Execute o comando a seguir para criar um mapeamento de ingestão.

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

Preparar o Logstash para migração

Ao migrar dados para o cluster do Azure Data Explorer, é importante configurar corretamente um pipeline do Logstash. O pipeline garante que os dados sejam formatados corretamente e transferidos para a tabela de destino.

Se você precisar mover dados de vários clusters ou índices do Elasticsearch, poderá criar várias seções de entrada no arquivo de configuração do pipeline. Para conseguir isso, você pode definir uma seção de entrada para cada cluster ou índice do Elasticsearch e categorizá-los usando tags, se desejar. Em seguida, você pode usar essas marcas em instruções condicionais na seção de saída para direcionar esses conjuntos de dados para tabelas de cluster específicas do Azure Data Explorer

Para configurar um pipeline do Logstash:

  1. Em um shell de comando, navegue até o diretório raiz do Logstash e execute o comando a seguir para instalar o plug-in de saída do Logstash. Para obter mais informações sobre o plug-in, consulte Ingerir dados do Logstash.

    bin/logstash-plugin install logstash-output-kusto
    
  2. Crie um arquivo de configuração de pipeline do Logstash, usando as seguintes configurações:

    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

    Nome do Parâmetro Descrição
    Hosts A URL do cluster do Elasticsearch.
    index O nome do índice a ser migrado.
    consulta Consulta opcional para obter dados específicos do índice.
    usuário Nome de usuário para se conectar ao cluster do Elasticsearch.
    password Senha para se conectar ao cluster do Elasticsearch.
    marcas Tags opcionais para identificar a origem dos dados. Por exemplo, especifique tags => ["vehicle"] na seção elasticsearch e, em seguida, filtre usando if "vehicle" in [tags] { ... } o encapsulamento da seção kusto .
    ssl Especifica se um certificado SSL é necessário.
    ca_file O arquivo de certificado a ser passado para autenticação.

    Parâmetros de filtro

    O filtro ruby impede que dados duplicados sejam ingeridos em seu cluster, definindo um carimbo de data/hora exclusivo para arquivos de dados do Elasticsearch a cada 10 segundos. Essa é uma prática recomendada que divide os dados em arquivos com um carimbo de data/hora exclusivo, garantindo que os dados sejam processados corretamente para migração.

    Parâmetros de saída

    Nome do Parâmetro Descrição
    caminho O plug-in do Logstash grava eventos em arquivos temporários antes de enviá-los para o cluster. Esse parâmetro descreve o caminho para onde os arquivos temporários são salvos e uma expressão de tempo para a rotação de arquivos para disparar uploads para o cluster.
    ingest_url O ponto de extremidade do cluster para comunicação relacionada à ingestão.
    app_id, app_key e app_tenant Credenciais necessárias para se conectar ao cluster. Certifique-se de usar um aplicativo com privilégios de ingestão. Para obter mais informações, veja Pré-requisitos.
    database Nome do banco de dados para colocar os eventos.
    table Nome da tabela de destino para colocar os eventos.
    json_mapping O mapeamento é usado para mapear uma string json de evento de entrada no formato de linha correto (define qual propriedade ELK vai para qual coluna de esquema de tabela).

Migração

Depois de concluir a preparação das etapas de pré-migração, a próxima etapa é executar o processo de migração. É importante monitorar o pipeline durante o processo de migração de dados para garantir que ele esteja funcionando sem problemas e para que você possa resolver quaisquer problemas que possam surgir.

Para migrar seus dados, em um shell de comando, navegue até o diretório raiz do Logstash e execute o seguinte comando:

bin/logstash -f <your_pipeline>.conf

Você deve ver as informações impressas na tela.

Após a migração

Após a conclusão da migração, você precisa passar por uma série de tarefas pós-migração para validar os dados e garantir que tudo esteja funcionando da maneira mais suave e eficiente possível.

O processo de validação de dados para um índice específico geralmente consiste nas seguintes atividades:

Comparação de dados: compare os dados migrados no cluster do Azure Data Explorer com os dados originais no Elasticsearch. Você pode fazer isso usando uma ferramenta como o Kibana na pilha ELK, que permite consultar e visualizar os dados em ambos os ambientes.

Execução de consulta: execute uma série de consultas nos dados migrados no cluster do Azure Data Explorer para garantir que os dados sejam precisos e completos. Isso inclui a execução de consultas que testam as relações entre diferentes campos e consultas que testam a integridade dos dados.

Verificar se há dados ausentes: compare os dados migrados em seu cluster com os dados no Elasticsearch para verificar se há dados ausentes, dados duplicados ou quaisquer outras inconsistências de dados.

Valide o desempenho: teste o desempenho dos dados migrados em seu cluster e compare-o com o desempenho dos dados no Elasticsearch. Isso pode incluir a execução de consultas e a visualização dos dados para testar os tempos de resposta e garantir que os dados em seu cluster sejam otimizados para desempenho.

Importante

Repita o processo de validação de dados se alguma alteração for feita nos dados migrados ou no cluster para garantir que os dados ainda sejam precisos e completos.

Veja a seguir alguns exemplos de consultas que você pode executar para validar os dados no cluster:

  1. No Elasticsearch, execute as seguintes consultas para obter o :

    // 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. Na janela de consulta do banco de dados, execute a seguinte consulta correspondente:

    // 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 os resultados de ambos os conjuntos de consultas para garantir que os dados em seu cluster sejam precisos e completos.

Para saber mais sobre o Gerenciador de Banco de Dados do Azure, confira:

Para saber mais sobre a estrutura e o ciclo de adoção para migrações na nuvem, confira: