MongoDB自动同步数据到ElasticSearch工具mon
monstache简介
Monstach是一个用Go编写的同步守护进程,它将MongoDB集合连续索引到Elasticsearch中。Monstach使您能够使用Elasticsearch对MongoDB数据进行复杂的搜索和聚合,并轻松构建实时Kibana可视化和仪表板。
安装monstache
Monstach只是一个单一的二进制文件,不依赖于Ruby、Python或PHP等运行时。Monstach是用Go编写的,但除非你决定自己编写Go插件,否则你不需要安装Go语言。
如果你只是想运行Monstach,你只需要下载最新版本。对于版本的选择可以参考下表
Monstache version | Git branch (used to build plugin) | Docker tag | Description | Elasticsearch | MongoDB | Status |
---|---|---|---|---|---|---|
6 rel6 | rel6, latest | MongoDB, Inc. go driver | Version 7+ | Version 2.6+ | Supported | |
5 rel5 | rel5 | MongoDB, Inc. go driver | Version 6 | Version 2.6+ | Supported | |
4 master | rel4 | mgo community go driver | Version 6 | Version 3 | Deprecated | |
3 rel3 | rel3 | mgo community go driver | Versions 2 and 5 | Version 3 | Deprecated |
基本可以说,对于mongodb大部分的版本都是支持的,而ES版本也是基本覆盖。下载的话直接去github上下载编译好的,路径:/rwynn/monstache/releases
解压后会看到各平台的文件夹,进入对应文件夹,这里会有以.toml为结尾的配置文件
monstache配置
配置文件如下
# mongo连接串
mongo-url = "mongodb://root:xxx@XXX:XXX/XXX?authSource=XXX"
# ES地址
elasticsearch-urls = [ "http://192.168.0.1:9200"]
# 这里配置的是mongodb数据库+集合名字,这里配置的集合会在monstache启动的时候启动全量同步
direct-read-namespaces = ["xxx.xxxx"]
# 这里配置的是mongodb数据库+集合名字,这里配置的集合会在monstache启动后根据mongodb的变化实时同步到es
change-stream-namespaces = ["xxx.xxxx"]
# 打印日志
verbose = true
# 配置collection和es索引的对应关系上面namespace是mongodb数据库+集合名字,下面index是es里面的索引名字
[[mapping]]
namespace = "xxx.xxxx"
index = "indexName"
# 这里是脚本部分,可以控制同步的字段
[[script]]
namespace = "xxx.xxxx"
script = """
module.exports = function(doc, ns) {
return _.pick(doc, "field0","field1","field2","field3","field4","field5","field6");
}
"""
[logs]
info = "/var/logs/monstache/info.log"
warn = "/var/logs/monstache/warn.log"
error = "/var/logs/monstache/error.log"
trace = "/var/logs/monstache/trace.log"
以上的配置就可以满足绝大部分场景了,mongoDb同步到es,使用monstache是不需要提前创建索引的,没有的字段会自动创建类型,也可以提前创建好索引,但是默认monstache是全量同步字段的,所以也可以在配置里面额外配置[[script]]来控制同步的字段,其中脚本是js脚本,会消耗一定的性能
monstache 注册服务
把这个工具注册成服务并设置开机启动会比较好运维和管理使用
vim /usr/lib/systemd/system/monstache.service
然后编辑文件
[Unit]
Description=monstache sync service
[Service]
Type=notify
ExecStart=/usr/local/build/linux-amd64/monstache -f /usr/local/build/linux-amd64/config.toml
WatchdogSec=30s
Restart=always
[Install]
WantedBy=multi-user.target
然后执行命令
systemctl daemon-reload
systemctl enable monstache.service
就完成了注册启动的配置
monstache优缺点
monstache的优点很明显,配置简单功能强大且社区活跃度不低源码持续更新。
monstache的缺点是略微消耗monstache运行服务器的性能和mongodb的性能。每次启动的时候需要注意配置文件有没有配置全量同步。
在不考虑性能的情况下monstache还是非常值得选择的同步组件,非常简单方便。