Todos os produtos
Search
Central de documentação

Elasticsearch:Use Monstache to synchronize data from MongoDB to Elasticsearch in real time

Última atualização: Jun 27, 2026

O Monstache sincroniza dados do ApsaraDB for MongoDB com o Alibaba Cloud Elasticsearch em tempo real ao monitorar os oplogs do MongoDB. Este tutorial apresenta uma configuração completa, utilizando um conjunto de dados de filmes para demonstrar a sincronização completa, a sincronização incremental e a análise de dados no Kibana.

O Monstache sincroniza e assina dados em tempo real com base nos oplogs do MongoDB. Ele oferece suporte a change streams e pipelines de agregação do MongoDB, permitindo a sincronização de dados entre bancos de dados MongoDB e versões mais recentes de clusters Elasticsearch. Para obter mais informações sobre os recursos do Monstache, consulte Features.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Uma conta Alibaba Cloud com permissões para criar instâncias ECS, instâncias do ApsaraDB for MongoDB e clusters Elasticsearch

  • Conhecimento básico de operações de linha de comando Linux

Como funciona

O Monstache utiliza o oplog do MongoDB como fonte de eventos. Todas as operações de inserção, atualização e exclusão no MongoDB são registradas no oplog; o Monstache monitora esse log e propaga as alterações para o Elasticsearch quase em tempo real. Como o oplog é um recurso de conjunto de réplicas, sua instância do MongoDB deve ser um conjunto de réplicas ou um cluster fragmentado — instâncias independentes não têm suporte.

Etapa 1: Criar os recursos necessários

Crie os seguintes recursos na mesma virtual private cloud (VPC). Manter todos os três recursos na mesma VPC garante que a transmissão de dados ocorra pela rede interna, com segurança e alta velocidade.

  1. Crie um cluster Elasticsearch. Durante a criação, ative o recurso Auto Indexing. Este tutorial utiliza um cluster Elasticsearch V6.7 Standard Edition. Para obter detalhes, consulte Criar um cluster Alibaba Cloud Elasticsearch e Configurar o arquivo YML.

  2. Crie uma instância de conjunto de réplicas do ApsaraDB for MongoDB. Este tutorial utiliza uma instância de conjunto de réplicas do ApsaraDB for MongoDB V4.2. Prepare seus dados de teste após a criação — a figura abaixo mostra parte do conjunto de dados de filmes usado como exemplo. Para obter detalhes, consulte Início rápido para instâncias de conjunto de réplicas.

    Importante

    A instância do ApsaraDB for MongoDB deve ser uma instância de conjunto de réplicas ou de cluster fragmentado. O Monstache usa o oplog como fonte de eventos, recurso disponível apenas nesses tipos de instância.

    Test data

  3. Crie uma instância do Elastic Compute Service (ECS). A instância ECS hospedará o Monstache e deve executar Linux. Para obter detalhes, consulte Criar uma instância usando o assistente.

Nota

Garanta que a versão do Monstache instalada seja compatível com as versões da sua instância do ApsaraDB for MongoDB e do cluster Elasticsearch. Para informações sobre compatibilidade de versões, consulte Monstache version.

Etapa 2: Instalar o Monstache

Instale o Monstache na instância ECS compilando a partir do código-fonte. Antes da instalação, certifique-se de ter configurado as variáveis de ambiente do Go.

  1. Faça login na instância ECS. Para obter detalhes, consulte Conectar-se a uma instância Linux usando senha ou chave.

    Nota

    Este exemplo utiliza um usuário comum (não root).

  2. Baixe e extraia o Go.

    wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
    tar -xzf go1.14.4.linux-amd64.tar.gz
  3. Configure as variáveis de ambiente do Go. Abra o arquivo ~/.bash_profile:

    vim ~/.bash_profile

    Adicione as linhas a seguir. A variável GOPROXY aponta para o proxy de módulos Go do Alibaba Cloud, o que melhora a velocidade de download.

    export GOROOT=/home/test1/go
    export GOPATH=/home/go/
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    export GOPROXY=https://mirrors.aliyun.com/goproxy/

    Aplique as alterações:

    source ~/.bash_profile
  4. Clone o repositório do Monstache.

    Nota

    Se o erro git: command not found aparecer, instale o git primeiro: sudo yum install -y git.

    git clone https://github.com/rwynn/monstache.git
  5. Mude para a branch rel5 e instale.

    cd monstache
    git checkout rel5
    sudo go install
  6. Verifique a instalação.

    monstache -v

    Saída esperada:

    5.5.5

Etapa 3: Configurar e iniciar a sincronização de dados

O Monstache utiliza o formato TOML para configuração. Neste tutorial, os dados serão sincronizados a partir das coleções hotmovies e col no banco de dados mydb.

  1. No diretório do monstache, crie um arquivo de configuração.

    vim config.toml
  2. Adicione a configuração abaixo. Substitua os valores de espaço reservado pelos seus endpoints e credenciais reais.

    # connection settings
    mongo-url = "mongodb://<your_mongodb_user>:<your_mongodb_password>@dds-bp1aadcc629******.mongodb.rds.aliyuncs.com:3717"
    elasticsearch-urls = ["http://es-cn-mp91kzb8m00******.elasticsearch.aliyuncs.com:9200"]
    
    # collections to sync (full-sync on startup, then tail oplogs)
    direct-read-namespaces = ["mydb.hotmovies","mydb.col"]
    
    # to use MongoDB change streams instead of oplog tailing (requires MongoDB 3.6+):
    #change-stream-namespaces = ["mydb.col"]
    
    # filter to specific collections (oplog listener only, does not trigger a full-sync):
    #namespace-regex = '^mydb\.col$'
    
    # Elasticsearch credentials
    # For production use, create a dedicated account instead of using the default elastic account.
    # Assign only the permissions the account needs. See Use the RBAC mechanism provided by
    # Elasticsearch X-Pack to implement access control.
    elasticsearch-user = "elastic"
    elasticsearch-password = "<your_es_password>"
    
    # number of concurrent Go threads pushing documents to Elasticsearch
    elasticsearch-max-conns = 4
    
    # propagate collection and database deletions to Elasticsearch
    dropped-collections = true
    dropped-databases = true
    
    # save sync progress to monstache.monstache so sync can resume after a restart
    resume = true
    resume-strategy = 0
    
    # enable debug logging (logs all requests to Elasticsearch)
    verbose = true
    
    # high availability mode: processes sharing the same cluster-name cooperate
    cluster-name = 'es-cn-mp91kzb8m00******'
    
    # index mappings: override the default database.collection index name
    [[mapping]]
    namespace = "mydb.hotmovies"
    index = "hotmovies"
    type = "movies"
    
    [[mapping]]
    namespace = "mydb.col"
    index = "mydbcol"
    type = "collection"

    Principais parâmetros:

    Parâmetro

    Descrição

    mongo-url

    String de conexão para o nó primário da sua instância do ApsaraDB for MongoDB. Obtenha-a na página de detalhes da instância no console do ApsaraDB for MongoDB. Antes de conectar, adicione o endereço IP privado da instância ECS à lista de permissões da instância MongoDB. Consulte Configurar uma lista de permissões para uma instância de cluster fragmentado.

    elasticsearch-urls

    Endpoint interno do seu cluster Elasticsearch no formato http://<endpoint>:9200. Obtenha-o na página Basic Information do seu cluster. Consulte Visualizar as informações básicas de um cluster.

    direct-read-namespaces

    Coleções a serem copiadas do MongoDB na inicialização (sincronização completa), especificadas como database.collection. Consulte direct-read-namespaces.

    change-stream-namespaces

    Utiliza change streams do MongoDB em vez de monitoramento de oplog. Quando configurado, o monitoramento de oplog é desativado. Requer MongoDB 3.6 ou superior. Consulte change-stream-namespaces.

    namespace-regex

    Expressão regular para filtrar quais coleções o Monstache monitora. Este filtro aplica-se apenas ao listener de eventos de alteração e não aciona uma sincronização completa.

    elasticsearch-user

    Nome de usuário para autenticação no Elasticsearch. O padrão é elastic.

    elasticsearch-password

    Senha do usuário do Elasticsearch. Caso tenha esquecido, redefina-a. Consulte Redefinir a senha de acesso de um cluster Elasticsearch.

    elasticsearch-max-conns

    Número de threads Go simultâneas gravando no Elasticsearch. O padrão é 4.

    dropped-collections

    Quando definido como true (padrão), exclui o índice Elasticsearch mapeado quando uma coleção do MongoDB é removida.

    dropped-databases

    Quando definido como true (padrão), exclui os índices Elasticsearch mapeados quando um banco de dados MongoDB é removido.

    resume

    Quando definido como true, salva os timestamps do oplog em monstache.monstache, permitindo retomar a sincronização após uma reinicialização sem perda de dados. Configurado automaticamente como true quando cluster-name está definido. Consulte resume.

    resume-strategy

    Estratégia de retomada (válida apenas quando resume é true). O valor 0 utiliza timestamps. Consulte resume-strategy.

    verbose

    Quando definido como true, ativa logs de depuração, incluindo rastreamentos de requisições ao Elasticsearch. O padrão é false.

    cluster-name

    Ativa o modo de alta disponibilidade. Processos do Monstache que compartilham o mesmo cluster-name coordenam suas atividades. Consulte cluster-name.

    mapping

    Substitui o nome padrão do índice (que é database.collection). Consulte Index Mapping.

    Nota

    O Monstache oferece suporte a muitos outros parâmetros de configuração. Para cenários avançados, como transformação baseada em scripts, indexação GridFS ou filtragem complexa, consulte Monstache config e Advanced.

  3. Inicie o Monstache.

    monstache -f config.toml

    A flag -f carrega o arquivo de configuração especificado. Como verbose = true está definido na configuração, o Monstache registrará todos os rastreamentos de requisições ao Elasticsearch.

Etapa 4: Verificar a sincronização de dados

Utilize o console Data Management (DMS) para consultas no MongoDB e o console Kibana para consultas no Elasticsearch.

Verificar contagem de documentos após a sincronização completa

Execute as consultas a seguir para confirmar se a mesma contagem de documentos aparece em ambos os sistemas.

MongoDB:

db.hotmovies.find().count()

Saída esperada:

[
10000
]

Elasticsearch:

GET hotmovies/_count

Saída esperada:

{
  "count" : 10000,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  }
}

Testar sincronização de inserção

Insira dois documentos no MongoDB:

db.hotmovies.insert({id: 11003,title: "Beauty",overview: "How a group of IT women with high IQ become outstanding",original_language:"cn",release_date:"2020-06-17",popularity:67.654,vote_count:65487,vote_average:9.9})
db.hotmovies.insert({id: 11004,title: "Heroic Programmers",overview: "How a group of IT men with high IQ become outstanding",original_language:"cn",release_date:"2020-06-15",popularity:77.654,vote_count:85487,vote_average:11.9})

Consulte o Elasticsearch para confirmar se os documentos foram sincronizados:

GET hotmovies/_search
{
  "query": {
    "bool": {
      "should": [
        {"term":{"id":"11003"}},
        null
      ]
    }
  }
}

Insert data

Testar sincronização de atualização

Atualize um documento no MongoDB:

db.hotmovies.update({'title':'Beauty'},{$set:{'title':'Beautiful Programmers'}})

Consulte o Elasticsearch para confirmar a atualização:

GET hotmovies/_search
{
  "query": {
    "match": {
      "id":"11003"
    }
  }
}

Update data

Testar sincronização de exclusão

Remova os documentos do MongoDB:

db.hotmovies.remove({id: 11003})
db.hotmovies.remove({id: 11004})

Consulte o Elasticsearch para confirmar que os documentos foram removidos:

GET hotmovies/_search
{
  "query": {
    "bool": {
      "should": [
        {"term":{"id":"11003"}},
        null
      ]
    }
  }
}

Remove data

Etapa 5: Analisar dados no Kibana

Nota

Este tutorial utiliza o Kibana V6.7.0. A navegação pode variar em outras versões.

  1. Faça login no console Kibana. Para obter detalhes, consulte Fazer login no console Kibana.

  2. Crie um padrão de índice.

    1. No painel de navegação à esquerda, clique em Management.

    2. Na seção Kibana, clique em Index Patterns.

    3. Clique em Create index pattern.

    4. Defina o Index pattern e clique em Next step.

    5. Defina o Time Filter field name como I don't want to use the Time Filter.

    6. Clique em Create index pattern.

    Create an index pattern

  3. Crie um gráfico de pizza para os 10 filmes mais populares.

    1. No painel de navegação à esquerda, clique em Visualize.

    2. Clique no ícone + ao lado da caixa de pesquisa.

    3. Na caixa de diálogo New Visualization, clique em Pie. 创建Pie图

    4. Clique no padrão de índice hotmovies. 单击索引模式

    5. Configure as seções Metrics e Buckets conforme mostrado. Pie图配置

    6. Clique no ícone 运行图标 para aplicar a configuração. Pie图展示结果

Perguntas frequentes

Após ativar a alta disponibilidade e aumentar a concorrência, ocorre perda de dados. O que devo fazer?

Verifique primeiro se o cluster Elasticsearch está saudável. Se o cluster estiver em estado anormal, consulte as Perguntas frequentes do Elasticsearch para diagnosticar e resolver problemas no nível do cluster. Em seguida, reduza o valor de elasticsearch-max-conns e monitore quanto a novas perdas de dados.

Se o cluster estiver saudável, o problema provavelmente reside no Monstache. Consulte a documentação do Monstache para verificar problemas conhecidos e orientações de configuração.