Tous les produits
Search
Centre de documentation

Elasticsearch:Utiliser Monstache pour synchroniser des données de MongoDB vers Elasticsearch en temps réel

Dernière mise à jour :Aug 09, 2026

Monstache synchronise les données d'ApsaraDB for MongoDB vers Alibaba Cloud Elasticsearch en temps réel en suivant les journaux d'opérations (oplogs) de MongoDB. Ce tutoriel vous guide à travers une configuration complète, en utilisant un jeu de données cinématographiques pour illustrer la synchronisation complète, la synchronisation incrémentielle et l'analyse des données via Kibana.

Monstache synchronise et s'abonne aux données en temps réel en se basant sur les oplogs de MongoDB. Il prend en charge les flux de modifications (change streams) et les pipelines d'agrégation de MongoDB, et permet la synchronisation des données entre les bases de données MongoDB et les versions récentes des clusters Elasticsearch. Pour plus d'informations sur les fonctionnalités de Monstache, consultez Features.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un compte Alibaba Cloud disposant des autorisations nécessaires pour créer des instances ECS, des instances ApsaraDB for MongoDB et des clusters Elasticsearch

  • Une connaissance de base des opérations en ligne de commande Linux

Fonctionnement

Monstache utilise l'oplog de MongoDB comme source d'événements. Chaque insertion, mise à jour et suppression dans MongoDB est enregistrée dans l'oplog ; Monstache suit cet oplog et propage les modifications vers Elasticsearch en quasi-temps réel. Étant donné que l'oplog est une fonctionnalité propre aux ensembles de réplicas, votre instance MongoDB doit être un ensemble de réplicas ou un cluster fragmenté — les instances autonomes ne sont pas prises en charge.

Étape 1 : Créer les ressources requises

Créez les ressources suivantes au sein du même réseau privé virtuel (VPC). Le fait de placer ces trois éléments dans le même VPC garantit que les données transitent de manière sécurisée et à haute vitesse via le réseau interne.

  1. Créez un cluster Elasticsearch. Lors de la création, activez la fonctionnalité Auto Indexing. Ce tutoriel utilise un cluster Elasticsearch V6.7 Standard Edition. Pour plus de détails, consultez Create an Alibaba Cloud Elasticsearch cluster et Configure the YML file.

  2. Créez une instance d'ensemble de réplicas ApsaraDB for MongoDB. Ce tutoriel utilise une instance d'ensemble de réplicas ApsaraDB for MongoDB V4.2. Préparez vos données de test après la création — la figure suivante présente une partie du jeu de données cinématographiques utilisé à titre d'exemple. Pour plus de détails, consultez Quick start for replica set instances.

    Important

    L'instance ApsaraDB for MongoDB doit être une instance d'ensemble de réplicas ou un cluster fragmenté. Monstache utilise l'oplog comme source d'événements, lequel n'est disponible que sur ces types d'instances.

    Test data

  3. Créez une instance Elastic Compute Service (ECS). L'instance ECS héberge Monstache et doit exécuter Linux. Pour plus de détails, consultez Create an instance by using the wizard.

Remarque

Assurez-vous que la version de Monstache que vous installez est compatible avec les versions de votre instance ApsaraDB for MongoDB et de votre cluster Elasticsearch. Pour obtenir des informations sur la compatibilité des versions, consultez Monstache version.

Étape 2 : Installer Monstache

Installez Monstache sur l'instance ECS en compilant à partir du code source. Avant d'installer Monstache, assurez-vous d'avoir configuré les variables d'environnement Go.

  1. Connectez-vous à l'instance ECS. Pour plus de détails, consultez Connect to a Linux instance by using a password or key.

    Remarque

    Cet exemple utilise un utilisateur standard (non root).

  2. Téléchargez et extrayez Go.

    wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
    tar -xzf go1.14.4.linux-amd64.tar.gz
  3. Configurez les variables d'environnement Go. Ouvrez le fichier ~/.bash_profile :

    vim ~/.bash_profile

    Ajoutez les lignes suivantes. La variable GOPROXY pointe vers le proxy de module Go d'Alibaba Cloud, ce qui améliore la vitesse de téléchargement.

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

    Appliquez les modifications :

    source ~/.bash_profile
  4. Clonez le dépôt Monstache.

    Remarque

    Si l'erreur git: command not found apparaît, installez d'abord git : sudo yum install -y git.

    git clone https://github.com/rwynn/monstache.git
  5. Basculez vers la branche rel5 et installez le logiciel.

    cd monstache
    git checkout rel5
    sudo go install
  6. Vérifiez l'installation.

    monstache -v

    Sortie attendue :

    5.5.5

Étape 3 : Configurer et démarrer la synchronisation des données

Monstache utilise le format TOML pour sa configuration. Dans ce tutoriel, les données sont synchronisées depuis les collections hotmovies et col de la base de données mydb.

  1. Dans le répertoire monstache, créez un fichier de configuration.

    vim config.toml
  2. Ajoutez la configuration suivante. Remplacez les valeurs d'espace réservé par vos endpoints et identifiants réels.

    # 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"

    Paramètres clés :

    Paramètre Description
    mongo-url Chaîne de connexion vers le nœud principal de votre instance ApsaraDB for MongoDB. Vous pouvez l'obtenir depuis la page des détails de l'instance dans la console ApsaraDB for MongoDB. Avant de vous connecter, ajoutez l'adresse IP privée de l'instance ECS à la liste d'autorisation de l'instance MongoDB. Consultez Configure a whitelist for a sharded cluster instance.
    elasticsearch-urls Endpoint interne de votre cluster Elasticsearch au format http://<endpoint>:9200. Vous pouvez l'obtenir depuis la page Basic Information de votre cluster. Consultez View the basic information of a cluster.
    direct-read-namespaces Collections à copier depuis MongoDB au démarrage (synchronisation complète), spécifiées sous la forme database.collection. Consultez direct-read-namespaces.
    change-stream-namespaces Utilisez les flux de modifications MongoDB au lieu du suivi de l'oplog. Lorsque ce paramètre est configuré, le suivi de l'oplog est désactivé. Nécessite MongoDB 3.6 ou version ultérieure. Consultez change-stream-namespaces.
    namespace-regex Expression régulière permettant de filtrer les collections écoutées par Monstache. Il s'agit d'un filtre appliqué uniquement à l'écouteur d'événements de modification ; il ne déclenche pas de synchronisation complète.
    elasticsearch-user Nom d'utilisateur pour l'authentification Elasticsearch. La valeur par défaut est elastic.
    elasticsearch-password Mot de passe de l'utilisateur Elasticsearch. En cas d'oubli, réinitialisez-le. Consultez Reset the access password for an Elasticsearch cluster.
    elasticsearch-max-conns Nombre de threads Go simultanés écrivant dans Elasticsearch. La valeur par défaut est 4.
    dropped-collections Lorsque la valeur est true (par défaut), supprime l'index Elasticsearch mappé lorsqu'une collection MongoDB est supprimée.
    dropped-databases Lorsque la valeur est true (par défaut), supprime les index Elasticsearch mappés lorsqu'une base de données MongoDB est supprimée.
    resume Lorsque la valeur est true, enregistre les horodatages de l'oplog dans monstache.monstache afin que la synchronisation puisse reprendre après un redémarrage sans perte de données. Défini automatiquement sur true lorsque cluster-name est configuré. Consultez resume.
    resume-strategy Stratégie de reprise (valide uniquement lorsque resume est défini sur true). La valeur 0 utilise les horodatages. Consultez resume-strategy.
    verbose Lorsque la valeur est true, active la journalisation détaillée, y compris les traces des requêtes Elasticsearch. La valeur par défaut est false.
    cluster-name Active le mode haute disponibilité. Les processus Monstache partageant le même cluster-name se coordonnent entre eux. Consultez cluster-name.
    mapping Remplace le nom d'index par défaut (qui est database.collection). Consultez Index Mapping.
    Remarque

    Monstache prend en charge de nombreux autres paramètres de configuration. Pour les scénarios avancés tels que la transformation basée sur des scripts, l'indexation GridFS ou le filtrage complexe, consultez Monstache config et Advanced.

  3. Démarrez Monstache.

    monstache -f config.toml

    L'indicateur -f charge le fichier de configuration spécifié. Étant donné que verbose = true est défini dans la configuration, Monstache journalise toutes les traces de requêtes Elasticsearch.

Étape 4 : Vérifier la synchronisation des données

Utilisez la console Data Management (DMS) pour les requêtes MongoDB et la console Kibana pour les requêtes Elasticsearch.

Vérifiez le nombre de documents après la synchronisation complète

Exécutez les requêtes suivantes pour confirmer que le même nombre de documents apparaît dans les deux systèmes.

MongoDB :

db.hotmovies.find().count()

Sortie attendue :

[
10000
]

Elasticsearch :

GET hotmovies/_count

Sortie attendue :

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

Testez la synchronisation des insertions

Insérez deux documents dans 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})

Interrogez Elasticsearch pour confirmer que les documents ont été synchronisés :

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

Insert data

Testez la synchronisation des mises à jour

Mettez à jour un document dans MongoDB :

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

Interrogez Elasticsearch pour confirmer la mise à jour :

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

Update data

Testez la synchronisation des suppressions

Supprimez les documents de MongoDB :

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

Interrogez Elasticsearch pour confirmer que les documents ont disparu :

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

Remove data

Étape 5 : Analyser les données dans Kibana

Remarque

Ce tutoriel utilise Kibana V6.7.0. La navigation peut différer selon les versions.

  1. Connectez-vous à la console Kibana. Pour plus de détails, consultez Log on to the Kibana console.

  2. Créez un modèle d'index.

    1. Dans le volet de navigation de gauche, cliquez sur Management.

    2. Dans la section Kibana, cliquez sur Index Patterns.

    3. Cliquez sur Create index pattern.

    4. Définissez le paramètre Index pattern et cliquez sur Next step.

    5. Définissez le champ Time Filter field name sur I don't want to use the Time Filter.

    6. Cliquez sur Create index pattern.

    Create an index pattern

  3. Créez un diagramme circulaire pour les 10 films les plus populaires.

    1. Dans le volet de navigation de gauche, cliquez sur Visualize.

    2. Cliquez sur + à côté de la zone de recherche.

    3. Dans la boîte de dialogue New Visualization, cliquez sur Pie. 创建Pie图

    4. Cliquez sur le modèle d'index hotmovies. 单击索引模式

    5. Configurez les sections Metrics et Buckets comme indiqué. Pie图配置

    6. Cliquez sur l'icône 运行图标 pour appliquer la configuration. Pie图展示结果

FAQ

Après avoir activé la haute disponibilité et augmenté la concurrence, des pertes de données surviennent. Que faire ?

Vérifiez d'abord si le cluster Elasticsearch est sain. Si le cluster est dans un état anormal, reportez-vous à la Elasticsearch FAQ pour diagnostiquer et résoudre les problèmes au niveau du cluster, puis réduisez la valeur de elasticsearch-max-conns et surveillez l'apparition d'autres pertes de données.

Si le cluster est sain, le problème provient probablement de Monstache. Consultez la documentation Monstache pour connaître les problèmes connus et les recommandations de configuration.