Alibaba Cloud Elasticsearch memungkinkan Anda menganalisis semantik dan menampilkan hasil analisis dalam diagram besar untuk data bisnis yang disimpan di database MongoDB. Topik ini menjelaskan cara menggunakan Monstache untuk menyinkronkan data dari database MongoDB ke kluster Elasticsearch Alibaba Cloud secara real-time serta cara menganalisis data dan menampilkan hasil analisis.
Informasi latar belakang
Contoh dalam topik ini menunjukkan cara mengurai dan mengumpulkan statistik pada data film populer. Anda dapat melakukan operasi berikut:
Gunakan Monstache untuk dengan cepat menyinkronkan dan berlangganan data penuh atau inkremental.
Sinkronkan data dari database MongoDB Anda ke kluster Elasticsearch versi terbaru secara real-time.
Biasakan diri Anda dengan parameter konfigurasi umum Monstache.
Manfaat
Database MongoDB, kluster Elasticsearch Alibaba Cloud, dan Monstache diterapkan di virtual private cloud (VPC). Data dapat ditransmisikan secara aman melalui jaringan internal dengan kecepatan tinggi.
Monstache menyinkronkan dan berlangganan data secara real-time berdasarkan oplog MongoDB. Ini memungkinkan Anda menyinkronkan data antara database MongoDB dan kluster Elasticsearch versi terbaru. Monstache mendukung change streams dan aggregation pipelines dari MongoDB. Untuk informasi lebih lanjut tentang fitur Monstache, lihat Fitur.
Monstache mendukung penghapusan logis dan fisik. Anda juga dapat menggunakannya untuk menghapus database dan koleksi. Ini memastikan konsistensi data antara kluster Elasticsearch dan database MongoDB secara real-time.
Prosedur
Buat instance ApsaraDB for MongoDB, kluster Elasticsearch Alibaba Cloud, dan instance Elastic Compute Service (ECS) di VPC yang sama. Instance ECS digunakan untuk menginstal Monstache.
CatatanPastikan versi Monstache yang diinstal kompatibel dengan versi instance ApsaraDB for MongoDB dan kluster Elasticsearch. Untuk informasi tentang kompatibilitas versi Monstache, lihat Versi Monstache.
Langkah 2: Bangun Lingkungan Monstache
Instal Monstache pada instance ECS. Sebelum menginstal Monstache, pastikan Anda telah mengonfigurasi variabel lingkungan Go.
Langkah 3: Konfigurasikan Tugas Sinkronisasi Data Real-Time
Ubah informasi dalam file konfigurasi default Monstache. Informasi tersebut mencakup titik akhir instance ApsaraDB for MongoDB dan kluster Elasticsearch, koleksi yang ingin disinkronkan, serta nama pengguna dan kata sandi kluster Elasticsearch. Setelah mengubah informasi tersebut, jalankan Monstache untuk menyinkronkan data dari database ApsaraDB for MongoDB ke kluster Elasticsearch secara real-time.
Langkah 4: Lihat Hasil Sinkronisasi Data
Tambahkan, perbarui, atau hapus data di database ApsaraDB for MongoDB. Kemudian, periksa apakah data disinkronkan secara real-time.
Langkah 5: Analisis Data dan Tampilkan Hasil Analisis di Konsol Kibana
Di konsol Kibana, analisis data dan tampilkan hasil analisis dalam diagram pie.
Langkah 1: Persiapkan
Buat kluster Elasticsearch dan aktifkan fitur Auto Indexing untuk kluster tersebut.
Untuk informasi lebih lanjut, lihat Buat Kluster Elasticsearch Alibaba Cloud dan Konfigurasikan File YML. Dalam contoh ini, kluster Elasticsearch V6.7 Edisi Standar digunakan.
Buat instance ApsaraDB for MongoDB dan siapkan data uji.
Untuk informasi lebih lanjut, lihat Panduan Cepat untuk Instance Set Replika. Dalam topik ini, instance set replika ApsaraDB for MongoDB V4.2 digunakan. Gambar berikut menunjukkan sebagian data uji.
PentingInstance ApsaraDB for MongoDB yang Anda gunakan harus merupakan instance set replika atau instance kluster sharded.
Buat instance ECS.
Untuk informasi lebih lanjut, lihat Buat Instance Menggunakan Wizard. Instance ECS digunakan untuk menginstal Monstache. Instance tersebut harus menjalankan sistem operasi Linux dan berada di VPC yang sama dengan kluster Elasticsearch.
Langkah 2: Bangun lingkungan Monstache
Hubungkan ke instance ECS.
Untuk informasi lebih lanjut, lihat Hubungkan ke Instance Linux Menggunakan Kata Sandi atau Kunci.
CatatanDalam contoh ini, pengguna biasa digunakan.
Instal SDK untuk Go dan konfigurasikan variabel lingkungan.
CatatanSinkronisasi data berbasis Monstache bergantung pada bahasa pemrograman Go. Oleh karena itu, sebelum menginstal Monstache, Anda harus menyiapkan lingkungan Go pada instance ECS.
Unduh dan ekstrak paket instalasi SDK untuk Go.
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz tar -xzf go1.14.4.linux-amd64.tar.gzKonfigurasikan variabel lingkungan.
Jalankan perintah
vim ~/.bash_profileuntuk membuka file konfigurasi variabel lingkungan. Kemudian, tambahkan konten berikut ke file.GOPROXYmenentukan proxy untuk modul Alibaba Cloud SDK for Go.export GOROOT=/home/test1/go export GOPATH=/home/go/ export PATH=$PATH:$GOROOT/bin:$GOPATH/bin export GOPROXY=https://mirrors.aliyun.com/goproxy/Terapkan variabel lingkungan.
source ~/.bash_profile
Instal Monstache.
Unduh paket instalasi dari repositori GitHub.
git clone https://github.com/rwynn/monstache.gitCatatanJika pesan kesalahan
git: command not foundmuncul, Anda harus menjalankan perintahsudo yum install -y gituntuk menginstal repositori GitHub sebelum mengunduh paket instalasi.Masuk ke direktori monstache.
cd monstacheGanti versi.
Dalam contoh ini, rel5 digunakan.
git checkout rel5Instal Monstache.
sudo go installLihat versi Monstache.
monstache -vJika perintah berhasil dijalankan, hasil berikut akan dikembalikan:
5.5.5
Langkah 3: Konfigurasikan tugas sinkronisasi data real-time
Monstache menggunakan format TOML untuk konfigurasinya. Dalam banyak kasus, Monstache menggunakan port default untuk terhubung ke kluster Elasticsearch dan instance ApsaraDB for MongoDB di host lokal Anda dan melacak oplog instance ApsaraDB for MongoDB. Selama Monstache berjalan, semua perubahan pada data di database ApsaraDB for MongoDB Anda disinkronkan ke kluster Elasticsearch.
Dalam contoh ini, ApsaraDB for MongoDB dan Alibaba Cloud Elasticsearch digunakan, dan Anda perlu menentukan objek yang ingin disinkronkan. Oleh karena itu, Anda harus mengubah file konfigurasi default Monstache. Objek yang disinkronkan dalam contoh ini adalah koleksi hotmovies dan col di database mydb. Untuk mengubah file konfigurasi, lakukan langkah-langkah berikut:
Masuk ke direktori instalasi Monstache, buat file konfigurasi, lalu edit file tersebut.
cd monstache vim config.tomlUbah file konfigurasi.
Kode berikut memberikan contoh cara mengubah file konfigurasi. Untuk informasi lebih lanjut, lihat Penggunaan Monstache.
# pengaturan koneksi # hubungkan ke MongoDB menggunakan URL berikut mongo-url = "mongodb://<your_mongodb_user>:<your_mongodb_password>@dds-bp1aadcc629******.mongodb.rds.aliyuncs.com:3717" # hubungkan ke REST API Elasticsearch di URL node berikut elasticsearch-urls = ["http://es-cn-mp91kzb8m00******.elasticsearch.aliyuncs.com:9200"] # pengaturan yang sering diperlukan # jika Anda perlu menginisialisasi indeks dari koleksi dan tidak hanya mendengarkan dan menyinkronkan peristiwa perubahan # Anda dapat menyalin seluruh koleksi atau tampilan dari MongoDB ke Elasticsearch direct-read-namespaces = ["mydb.hotmovies","mydb.col"] # jika Anda ingin menggunakan fitur change streams MongoDB alih-alih pelacakan oplog warisan gunakan change-stream-namespaces # change streams memerlukan setidaknya MongoDB API 3.6+ # jika Anda memiliki MongoDB 4+ Anda dapat mendengarkan perubahan di seluruh database atau seluruh penyebaran # dalam hal ini Anda biasanya tidak memerlukan regex dalam konfigurasi Anda untuk menyaring koleksi kecuali Anda menargetkan penyebaran. # untuk mendengarkan seluruh db gunakan hanya nama database. Untuk penyebaran gunakan string kosong. #change-stream-namespaces = ["mydb.col"] # pengaturan tambahan # jika Anda tidak ingin mendengarkan perubahan di semua koleksi di MongoDB tetapi hanya beberapa # misalnya hanya mendengarkan penyisipan, pembaruan, penghapusan, dan drop dari mydb.mycollection # pengaturan ini tidak memulai salinan, ini hanya filter pada pendengar peristiwa perubahan #namespace-regex = '^mydb\.col$' # kompres permintaan ke Elasticsearch #gzip = true # hasilkan statistik pengindeksan #stats = true # indeks statistik ke Elasticsearch #index-stats = true # gunakan file PEM berikut untuk koneksi ke MongoDB #mongo-pem-file = "/path/to/mongoCert.pem" # nonaktifkan validasi PEM #mongo-validate-pem-file = false # gunakan nama pengguna berikut untuk otentikasi dasar Elasticsearch elasticsearch-user = "elastic" # gunakan kata sandi berikut untuk otentikasi dasar Elasticsearch elasticsearch-password = "<your_es_password>" # gunakan 4 rutinitas go secara bersamaan mendorong dokumen ke Elasticsearch elasticsearch-max-conns = 4 # gunakan file PEM berikut untuk koneksi ke Elasticsearch #elasticsearch-pem-file = "/path/to/elasticCert.pem" # validasi koneksi ke Elasticsearch #elastic-validate-pem-file = true # propagasikan koleksi yang dihapus di MongoDB sebagai penghapusan indeks di Elasticsearch dropped-collections = true # propagasikan database yang dihapus di MongoDB sebagai penghapusan indeks di Elasticsearch dropped-databases = true # jangan mulai pemrosesan dari awal oplog MongoDB # jika Anda mengatur replay ke true Anda mungkin melihat pesan konflik versi # dalam log jika Anda telah menyinkronkan sebelumnya. Ini hanya berarti bahwa Anda sedang memainkan ulang dokumen lama yang sudah ada # di Elasticsearch dengan versi yang lebih baru. Elasticsearch mencegah dokumen lama menimpa yang baru. #replay = false # lanjutkan pemrosesan dari timestamp yang disimpan dalam run sebelumnya resume = true # jangan validasi bahwa timestamp kemajuan telah disimpan #resume-write-unsafe = false # timpa nama di bawah mana status resume disimpan #resume-name = "default" # gunakan strategi resume kustom (token) alih-alih strategi default (timestamp) # token bekerja dengan MongoDB API 3.6+ sementara timestamp hanya bekerja dengan MongoDB API 4.0+ resume-strategy = 0 # kecualikan dokumen yang ruang namanya cocok dengan pola berikut #namespace-exclude-regex = '^mydb\.ignorecollection$' # aktifkan pengindeksan konten GridFS #index-files = true # aktifkan penyorotan hasil pencarian konten GridFS #file-highlighting = true # indeks file GridFS yang dimasukkan ke koleksi berikut #file-namespaces = ["users.fs.files"] # cetak informasi terperinci termasuk jejak permintaan verbose = true # aktifkan mode pengelompokan cluster-name = 'es-cn-mp91kzb8m00******' # jangan keluar setelah sinkronisasi penuh, melainkan lanjutkan melacak oplog #exit-after-direct-reads = false [[mapping]] namespace = "mydb.hotmovies" index = "hotmovies" type = "movies" [[mapping]] namespace = "mydb.col" index = "mydbcol" type = "collection"Parameter
Deskripsi
mongo-url
String koneksi node utama di instance ApsaraDB for MongoDB. Anda dapat memperoleh string koneksi dari halaman detail instance ApsaraDB for MongoDB di konsol ApsaraDB for MongoDB.
<your_mongodb_user>menentukan nama pengguna database ApsaraDB for MongoDB yang ingin Anda akses di instance ApsaraDB for MongoDB.<your_mongodb_password>menentukan kata sandi database ApsaraDB for MongoDB.Sebelum Anda memperoleh string koneksi node utama di instance ApsaraDB for MongoDB, tambahkan alamat IP privat instance ECS tempat Monstache diinstal ke daftar putih alamat IP instance ApsaraDB for MongoDB. Untuk informasi lebih lanjut, lihat Konfigurasikan whitelist untuk instance kluster sharded.
elasticsearch-urls
URL yang digunakan untuk mengakses kluster Elasticsearch. Tentukan URL dalam format berikut:
http://<Titik akhir internal kluster Elasticsearch>:9200. Anda dapat memperoleh titik akhir di halaman Informasi Dasar kluster Elasticsearch di konsol Elasticsearch. Untuk informasi lebih lanjut, lihat Lihat informasi dasar kluster.direct-read-namespaces
Koleksi dari mana Anda ingin menyinkronkan data. Untuk informasi lebih lanjut, lihat direct-read-namespaces. Dalam contoh ini, data disinkronkan dari koleksi hotmovies dan col di database mydb.
change-stream-namespaces
Anda harus mengonfigurasi parameter ini jika ingin menggunakan fitur change stream dari ApsaraDB for MongoDB. Jika Anda mengonfigurasi parameter ini, pelacakan oplog menjadi tidak valid. Untuk informasi lebih lanjut, lihat change-stream-namespaces.
namespace-regex
Ekspresi reguler yang digunakan untuk menentukan koleksi yang ingin Anda pantau. Setelah Anda menentukan ekspresi reguler, sistem dapat memantau perubahan data di koleksi yang sesuai dengan ekspresi reguler.
elasticsearch-user
Nama pengguna yang digunakan untuk mengakses kluster Elasticsearch. Nama pengguna default adalah elastic.
PentingUntuk memastikan keamanan sistem, kami sarankan Anda tidak menggunakan akun elastic dalam skenario bisnis aktual. Anda dapat menggunakan akun kustom. Sebelum menggunakan akun kustom, Anda harus membuat peran untuk akun tersebut, memberikan izin yang diperlukan kepada peran, dan kemudian menetapkan peran ke akun. Untuk informasi lebih lanjut, lihat Gunakan mekanisme RBAC yang disediakan oleh Elasticsearch X-Pack untuk mengimplementasikan kontrol akses.
elasticsearch-password
Kata sandi yang digunakan untuk mengakses kluster Elasticsearch. Kata sandi yang sesuai dengan nama pengguna elastic ditentukan saat Anda membuat kluster Elasticsearch. Jika Anda lupa kata sandi, Anda dapat menyetel ulang. Untuk informasi tentang tindakan pencegahan dan prosedur untuk menyetel ulang kata sandi, lihat Setel ulang kata sandi akses untuk kluster Elasticsearch.
elasticsearch-max-conns
Jumlah thread yang digunakan untuk terhubung ke kluster Elasticsearch. Nilai default adalah 4. Nilai ini menunjukkan bahwa empat thread Go digunakan pada saat yang sama untuk menyinkronkan data ke kluster Elasticsearch.
dropped-collections
Menentukan apakah akan menghapus indeks yang dipetakan di kluster Elasticsearch jika koleksi di database ApsaraDB for MongoDB dihapus. Nilai default adalah true, yang menunjukkan untuk menghapus indeks yang dipetakan di kluster Elasticsearch jika koleksi di database ApsaraDB for MongoDB dihapus.
dropped-databases
Menentukan apakah akan menghapus indeks yang dipetakan di kluster Elasticsearch jika database ApsaraDB for MongoDB dihapus. Nilai default adalah true, yang menunjukkan untuk menghapus indeks yang dipetakan di kluster Elasticsearch jika database ApsaraDB for MongoDB dihapus.
resume
Menentukan apakah akan mengizinkan Monstache menulis timestamp operasi yang disinkronkan ke kluster Elasticsearch ke koleksi monstache.monstache. Nilai default adalah false. Jika Anda mengatur parameter ini ke true, Monstache menulis timestamp operasi yang disinkronkan ke kluster Elasticsearch ke koleksi monstache.monstache. Jika Monstache gagal, Anda dapat menggunakan timestamp untuk melanjutkan tugas sinkronisasi. Ini menghindari kehilangan data. Jika Monstache dimulai dengan parameter cluster-name dikonfigurasi, parameter resume secara otomatis diatur ke true. Untuk informasi lebih lanjut, lihat resume.
resume-strategy
Kebijakan melanjutkan. Parameter ini hanya valid ketika parameter resume diatur ke true. Untuk informasi lebih lanjut, lihat resume-strategy.
verbose
Menentukan apakah akan mengaktifkan logging debug. Nilai default adalah false, yang menunjukkan bahwa logging debug dinonaktifkan.
cluster-name
Nama kluster Elasticsearch. Jika Anda mengonfigurasi parameter ini, Monstache berjalan dalam mode ketersediaan tinggi. Proses-proses dengan nama kluster yang sama bekerja sama satu sama lain. Untuk informasi lebih lanjut, lihat cluster-name.
mapping
Pemetaan indeks di kluster Elasticsearch. Secara default, ketika data disinkronkan dari database ApsaraDB for MongoDB ke kluster Elasticsearch, nama indeks secara otomatis dipetakan ke nama koleksi dalam format
Nama database.Nama koleksi. Anda dapat mengubah nama indeks dengan mengonfigurasi parameter ini. Untuk informasi lebih lanjut, lihat Pemetaan Indeks.CatatanMonstache mendukung sejumlah besar parameter. Tabel di atas hanya menjelaskan beberapa parameter yang digunakan untuk sinkronisasi data real-time. Untuk informasi tentang cara mengonfigurasi parameter yang digunakan untuk sinkronisasi data kompleks, lihat Konfigurasi Monstache dan Lanjutan.
Jalankan Monstache.
monstache -f config.tomlCatatanParameter -f digunakan untuk menjalankan Monstache secara eksplisit. Dalam hal ini, sistem akan mencatat semua operasi debugging, termasuk pelacakan permintaan untuk kluster Elasticsearch.
Langkah 4: Lihat hasil sinkronisasi data
Masuk ke konsol Data Management (DMS) instance ApsaraDB for MongoDB dan konsol Kibana kluster Elasticsearch. Kueri jumlah dokumen di database ApsaraDB for MongoDB sebelum sinkronisasi dan jumlah dokumen di kluster Elasticsearch setelah sinkronisasi.
CatatanUntuk informasi lebih lanjut tentang cara masuk ke konsol DMS, lihat Hubungkan ke Instance Set Replika Menggunakan DMS.
Untuk informasi lebih lanjut tentang cara masuk ke konsol Kibana, lihat Masuk ke Konsol Kibana.
Instance ApsaraDB for MongoDB
db.hotmovies.find().count()Jika perintah berhasil dijalankan, hasil berikut akan dikembalikan:
[ 10000 ]Kluster Elasticsearch
GET hotmovies/_countJika perintah berhasil dijalankan, hasil berikut akan dikembalikan: Hasilnya menunjukkan bahwa jumlah dokumen di database ApsaraDB for MongoDB sebelum sinkronisasi dan jumlah dokumen di kluster Elasticsearch setelah sinkronisasi adalah 10.000.
{ "count" : 10000, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 } }
Sisipkan data ke database ApsaraDB for MongoDB dan periksa apakah data tersebut disinkronkan ke kluster Elasticsearch.
Instance ApsaraDB for 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})Kluster Elasticsearch
GET hotmovies/_search { "query": { "bool": { "should": [ {"term":{"id":"11003"}}, null ] } } }Jika perintah berhasil dijalankan, hasil yang ditunjukkan pada gambar dikembalikan.

Perbarui data di database ApsaraDB for MongoDB. Kemudian, periksa apakah data di kluster Elasticsearch juga diperbarui.
Instance ApsaraDB for MongoDB
db.hotmovies.update({'title':'Beauty'},{$set:{'title':'Beautiful Programmers'}})Kluster Elasticsearch
GET hotmovies/_search { "query": { "match": { "id":"11003" } } }Jika perintah berhasil dijalankan, hasil yang ditunjukkan pada gambar dikembalikan.

Hapus data dari database ApsaraDB for MongoDB. Kemudian, periksa apakah data tersebut juga dihapus dari kluster Elasticsearch.
Instance ApsaraDB for MongoDB
db.hotmovies.remove({id: 11003}) db.hotmovies.remove({id: 11004})Kluster Elasticsearch
GET hotmovies/_search { "query": { "bool": { "should": [ {"term":{"id":"11003"}}, null ] } } }Jika perintah berhasil dijalankan, hasil yang ditunjukkan pada gambar dikembalikan.

Langkah 5: Analisis data dan tampilkan hasil analisis di konsol Kibana
Masuk ke konsol Kibana kluster Elasticsearch Anda dan buka halaman utama konsol Kibana sesuai petunjuk.
Untuk informasi lebih lanjut tentang cara masuk ke konsol Kibana, lihat Masuk ke Konsol Kibana.
CatatanDalam contoh ini, kluster Elasticsearch V6.7.0 digunakan. Operasi pada kluster versi lain mungkin berbeda. Operasi aktual di konsol yang berlaku.
Buat pola indeks.

- Di panel navigasi sisi kiri, klik Management.
- Di bagian Kibana, klik Index Patterns.
- Klik Create index pattern.
- Tentukan Index pattern dan klik Next step.
Konfigurasikan Time Filter field name. Dalam contoh ini, Time Filter field name diatur ke I don't want to use the Time Filter.
- Klik Create index pattern.
Konfigurasikan diagram.
Contoh berikut menunjukkan cara mengonfigurasi diagram pie untuk 10 film populer teratas:
Di panel navigasi sisi kiri, klik Visualize.
Klik + di sebelah kotak pencarian.
Di kotak dialog New Visualization, klik Pie.

Klik pola indeks hotmovies.

Konfigurasikan parameter di bagian Metrics dan Buckets berdasarkan gambar berikut.

Klik ikon
untuk menerapkan konfigurasi dan menampilkan data.
FAQ
Masalah
Setelah saya mengonfigurasi fitur ketersediaan tinggi dan konkurensi tinggi untuk kluster Elasticsearch saya, terjadi kehilangan data. Apa yang harus saya lakukan?
Solusi
Periksa apakah kluster Elasticsearch dalam keadaan normal.
Jika kluster Elasticsearch dalam keadaan normal, periksa apakah Monstache bekerja seperti yang diharapkan. Untuk informasi lebih lanjut, lihat dokumentasi terkait di open source Monstache.
Jika kluster Elasticsearch dalam keadaan tidak normal, lihat FAQ untuk mengidentifikasi masalah yang terjadi pada kluster Elasticsearch dan memperbaiki masalah tersebut. Kurangi jumlah thread paralel untuk kluster Elasticsearch dan periksa apakah masalah kehilangan data terselesaikan.