All Products
Search
Document Center

Elasticsearch:Gunakan Monstache untuk menyinkronkan data dari MongoDB ke Elasticsearch secara real time

Last Updated:Mar 27, 2026

Monstache menyinkronkan data dari ApsaraDB for MongoDB ke Alibaba Cloud Elasticsearch secara real time dengan mengikuti (tail) oplog MongoDB. Tutorial ini memandu Anda melalui penyiapan lengkap, menggunakan dataset film sebagai contoh untuk menunjukkan sinkronisasi penuh (full-sync), sinkronisasi inkremental, serta analisis data berbasis Kibana.

Monstache menyinkronkan dan berlangganan data secara real time berdasarkan oplog MongoDB. Fitur ini mendukung change streams dan aggregation pipelines MongoDB, serta memungkinkan sinkronisasi data antara database MongoDB dan kluster Elasticsearch versi terbaru. Untuk informasi lebih lanjut mengenai fitur Monstache, lihat Features.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Akun Alibaba Cloud dengan izin untuk membuat instance ECS, instance ApsaraDB for MongoDB, dan kluster Elasticsearch

  • Pemahaman dasar mengenai operasi command-line Linux

Cara kerja

Monstache menggunakan oplog MongoDB sebagai sumber event. Setiap operasi insert, update, dan delete di MongoDB dicatat dalam oplog; Monstache mengikuti oplog tersebut dan menyebarkan perubahan ke Elasticsearch hampir secara real time. Karena oplog merupakan fitur replica set, instans MongoDB Anda harus berupa instans replica set atau instansi kluster sharded — instans mandiri tidak didukung.

Langkah 1: Buat sumber daya yang diperlukan

Buat sumber daya berikut dalam virtual private cloud (VPC) yang sama. Menempatkan ketiganya dalam VPC yang sama memastikan data ditransmisikan melalui jaringan internal secara aman dan berkecepatan tinggi.

  1. Buat kluster Elasticsearch. Saat pembuatan, aktifkan fitur Auto Indexing. Tutorial ini menggunakan kluster Elasticsearch V6.7 Edisi Standar. Untuk detailnya, lihat Buat kluster Alibaba Cloud Elasticsearch dan Konfigurasikan file YML.

  2. Buat instans ApsaraDB for MongoDB replica set. Tutorial ini menggunakan instans ApsaraDB for MongoDB V4.2 replica set. Siapkan data uji setelah pembuatan — gambar berikut menunjukkan sebagian dataset film yang digunakan sebagai contoh. Untuk detailnya, lihat Panduan cepat untuk instans replica set.

    Penting

    Instans ApsaraDB for MongoDB harus berupa instans replica set atau instansi kluster sharded. Monstache menggunakan oplog sebagai sumber event, yang hanya tersedia pada tipe instans tersebut.

    Test data

  3. Buat instance Elastic Compute Service (ECS). Instance ECS menjalankan Monstache dan harus menggunakan sistem operasi Linux. Untuk detailnya, lihat Buat instance menggunakan wizard.

Catatan

Pastikan versi Monstache yang diinstal kompatibel dengan versi instans ApsaraDB for MongoDB dan kluster Elasticsearch Anda. Untuk informasi kompatibilitas versi, lihat Monstache version.

Langkah 2: Instal Monstache

Instal Monstache pada instance ECS dengan membangun dari source code. Sebelum menginstal Monstache, pastikan Anda telah mengonfigurasi variabel lingkungan Go.

  1. Login ke instance ECS. Untuk detailnya, lihat Hubungkan ke instance Linux menggunakan password atau kunci.

    Catatan

    Contoh ini menggunakan pengguna biasa (non-root).

  2. Unduh dan ekstrak Go.

    wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
    tar -xzf go1.14.4.linux-amd64.tar.gz
  3. Konfigurasikan variabel lingkungan Go. Buka ~/.bash_profile:

    vim ~/.bash_profile

    Tambahkan baris-baris berikut. GOPROXY mengarah ke proxy modul Go Alibaba Cloud, yang meningkatkan kecepatan unduh.

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

    Terapkan perubahan:

    source ~/.bash_profile
  4. Klon repositori Monstache.

    Catatan

    Jika muncul error git: command not found, instal git terlebih dahulu: sudo yum install -y git.

    git clone https://github.com/rwynn/monstache.git
  5. Beralih ke branch rel5 dan instal.

    cd monstache
    git checkout rel5
    sudo go install
  6. Verifikasi instalasi.

    monstache -v

    Output yang diharapkan:

    5.5.5

Langkah 3: Konfigurasikan dan mulai sinkronisasi data

Monstache menggunakan format TOML untuk konfigurasi. Dalam tutorial ini, data disinkronkan dari koleksi hotmovies dan col dalam database mydb.

  1. Di direktori monstache, buat file konfigurasi.

    vim config.toml
  2. Tambahkan konfigurasi berikut. Ganti nilai placeholder dengan titik akhir dan kredensial aktual Anda.

    # pengaturan koneksi
    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"]
    
    # koleksi yang akan disinkronkan (full-sync saat startup, lalu tail oplog)
    direct-read-namespaces = ["mydb.hotmovies","mydb.col"]
    
    # gunakan change streams MongoDB alih-alih tailing oplog (memerlukan MongoDB 3.6+):
    #change-stream-namespaces = ["mydb.col"]
    
    # filter ke koleksi tertentu (hanya untuk pendengar oplog, tidak memicu full-sync):
    #namespace-regex = '^mydb\.col$'
    
    # kredensial Elasticsearch
    # Untuk penggunaan produksi, buat akun khusus alih-alih menggunakan akun elastic default.
    # Berikan hanya izin yang dibutuhkan akun tersebut. Lihat Gunakan mekanisme RBAC yang disediakan oleh
    # Elasticsearch X-Pack untuk menerapkan kontrol akses.
    elasticsearch-user = "elastic"
    elasticsearch-password = "<your_es_password>"
    
    # jumlah thread Go konkuren yang mendorong dokumen ke Elasticsearch
    elasticsearch-max-conns = 4
    
    # sebarkan penghapusan koleksi dan database ke Elasticsearch
    dropped-collections = true
    dropped-databases = true
    
    # simpan progres sinkronisasi ke monstache.monstache agar sinkronisasi dapat dilanjutkan setelah restart
    resume = true
    resume-strategy = 0
    
    # aktifkan logging debug (mencatat semua permintaan ke Elasticsearch)
    verbose = true
    
    # mode ketersediaan tinggi: proses yang berbagi cluster-name yang sama saling bekerja sama
    cluster-name = 'es-cn-mp91kzb8m00******'
    
    # pemetaan indeks: timpa nama indeks database.collection default
    [[mapping]]
    namespace = "mydb.hotmovies"
    index = "hotmovies"
    type = "movies"
    
    [[mapping]]
    namespace = "mydb.col"
    index = "mydbcol"
    type = "collection"

    Parameter utama:

    ParameterDeskripsi
    mongo-urlString koneksi untuk node primary instans ApsaraDB for MongoDB Anda. Dapatkan dari halaman detail instans di konsol ApsaraDB for MongoDB. Sebelum menghubungkan, tambahkan alamat IP pribadi instance ECS ke daftar putih instans MongoDB. Lihat Konfigurasikan daftar putih untuk instansi kluster sharded.
    elasticsearch-urlsTitik akhir internal kluster Elasticsearch Anda dalam format http://<endpoint>:9200. Dapatkan dari halaman Basic Information kluster Anda. Lihat Lihat informasi dasar kluster.
    direct-read-namespacesKoleksi yang akan disalin dari MongoDB saat startup (full-sync), ditentukan sebagai database.collection. Lihat direct-read-namespaces.
    change-stream-namespacesGunakan change streams MongoDB alih-alih tailing oplog. Jika dikonfigurasi, tailing oplog dinonaktifkan. Memerlukan MongoDB 3.6+. Lihat change-stream-namespaces.
    namespace-regexEkspresi reguler untuk memfilter koleksi mana yang didengarkan Monstache. Ini hanya berfungsi sebagai filter pada pendengar event perubahan — tidak memicu full-sync.
    elasticsearch-userNama pengguna untuk otentikasi Elasticsearch. Nilai default adalah elastic.
    elasticsearch-passwordPassword untuk pengguna Elasticsearch. Jika lupa, atur ulang. Lihat Atur ulang password akses kluster Elasticsearch.
    elasticsearch-max-connsJumlah thread Go konkuren yang menulis ke Elasticsearch. Nilai default adalah 4.
    dropped-collectionsJika diatur true (default), menghapus indeks Elasticsearch yang dipetakan saat koleksi MongoDB di-drop.
    dropped-databasesJika diatur true (default), menghapus indeks Elasticsearch yang dipetakan saat database MongoDB di-drop.
    resumeJika diatur true, menyimpan timestamp oplog ke monstache.monstache sehingga sinkronisasi dapat dilanjutkan setelah restart tanpa kehilangan data. Secara otomatis diatur ke true jika cluster-name dikonfigurasi. Lihat resume.
    resume-strategyStrategi resume (hanya berlaku jika resume bernilai true). 0 menggunakan timestamp. Lihat resume-strategy.
    verboseJika diatur true, mengaktifkan logging debug termasuk jejak permintaan Elasticsearch. Nilai default adalah false.
    cluster-nameMengaktifkan mode ketersediaan tinggi. Proses Monstache yang berbagi cluster-name yang sama saling berkoordinasi. Lihat cluster-name.
    mappingMenimpa nama indeks default (yang berupa database.collection). Lihat Index Mapping.
    Catatan

    Monstache mendukung banyak parameter konfigurasi tambahan. Untuk skenario lanjutan seperti transformasi berbasis skrip, pengindeksan GridFS, atau filtering kompleks, lihat Monstache config dan Advanced.

  3. Jalankan Monstache.

    monstache -f config.toml

    Flag -f memuat file konfigurasi yang ditentukan. Karena verbose = true diatur dalam konfigurasi, Monstache mencatat semua jejak permintaan Elasticsearch.

Langkah 4: Verifikasi sinkronisasi data

Gunakan konsol Data Management (DMS) untuk kueri MongoDB dan konsol Kibana untuk kueri Elasticsearch.

Periksa jumlah dokumen setelah full-sync

Jalankan kueri berikut untuk memastikan jumlah dokumen yang sama muncul di kedua sistem.

MongoDB:

db.hotmovies.find().count()

Output yang diharapkan:

[
10000
]

Elasticsearch:

GET hotmovies/_count

Output yang diharapkan:

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

Uji sinkronisasi insert

Insert dua dokumen di 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})

Kueri Elasticsearch untuk memastikan dokumen telah disinkronkan:

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

Uji sinkronisasi update

Update dokumen di MongoDB:

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

Kueri Elasticsearch untuk memastikan update telah diterapkan:

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

Uji Sinkronisasi Penghapusan

Hapus dokumen dari MongoDB:

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

Kueri Elasticsearch untuk memastikan dokumen telah dihapus:

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

Langkah 5: Analisis data di Kibana

Catatan

Tutorial ini menggunakan Kibana V6.7.0. Navigasi mungkin berbeda pada versi lain.

  1. Login ke konsol Kibana. Untuk detailnya, lihat Login ke konsol Kibana.

  2. Buat pola indeks.

    1. Di panel navigasi kiri, klik Management.

    2. Di bagian Kibana, klik Index Patterns.

    3. Klik Create index pattern.

    4. Atur Index pattern dan klik Next step.

    5. Atur Time Filter field name ke I don't want to use the Time Filter.

    6. Klik Create index pattern.

    Create an index pattern

  3. Buat grafik pie untuk 10 film paling populer.

    1. Di panel navigasi kiri, klik Visualize.

    2. Klik + di samping kotak pencarian.

    3. Di dialog New Visualization, klik Pie. 创建Pie图

    4. Klik pola indeks hotmovies. 单击索引模式

    5. Konfigurasikan bagian Metrics dan Buckets seperti yang ditunjukkan. Pie图配置

    6. Klik ikon 运行图标 untuk menerapkan konfigurasi. Pie图展示结果

FAQ

Setelah mengaktifkan ketersediaan tinggi dan meningkatkan konkurensi, terjadi kehilangan data. Apa yang harus saya lakukan?

Pertama, periksa apakah kluster Elasticsearch dalam kondisi sehat. Jika kluster berada dalam kondisi abnormal, rujuk ke Elasticsearch FAQ untuk mendiagnosis dan menyelesaikan masalah tingkat kluster, lalu turunkan nilai elasticsearch-max-conns dan pantau kemungkinan kehilangan data lebih lanjut.

Jika kluster dalam kondisi sehat, kemungkinan besar masalah berasal dari Monstache. Periksa dokumentasi Monstache untuk mengetahui isu-isu yang diketahui dan panduan konfigurasi.