MongoDB+Elasticsearch+Kibana的搭建笔记
大致来说
我想在Kibana上进行可视化,所以记录下了构建步骤的笔记。
简单来说,整个流程就是将MongoDB中的日志同步到Elasticsearch中,在Kibana中进行可视化,并记录导出/导入Kibana的配置(如索引模式和保存的对象)。
环境
-
- Ubuntu 16.04 or CentOS 7 or macOS 10.13
-
- Elasticsearch 5.6.x
-
- kibana 5.6.x
-
- MongoDB 3.4.7 (適当に新しめのでいいと思う)
- Python 3.6.x
注意,下述的elasticsearch-dump只支持Elasticsearch 5(截至2017年12月6日),所以特意选择了5版本。
安装elasticsearch和kibana
请自行安装MongoDB。
设置下列复制品套装是必要的。
Ubuntu的情况
弹性搜索
在Ubuntu 14.04上安装Elasticsearch。
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get update && sudo apt-get install elasticsearch
sudo /etc/init.d/elasticsearch start
Kibana 可视化工具
从 Kibana 下载适当的文件
如果是CentOS的情况。
elasticsearch – 弹性搜索
用yum在CentOS上安装Elasticsearch。
使用RPM包安装Elasticsearch
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo yum install elasticsearch
sudo /etc/init.d/elasticsearch restart
Kibana 是一个数据可视化工具。
可以随便下载,但也可以使用yum安装
使用RPM安装Kibana
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo yum install kibana
sudo systemctl restart kibana.service
在macOS的情况下
brew install elasticsearch@5.6 kibana@5.6
各自的设置
elasticsearch配置文件
在引入Elasticsearch之前需要注意的事项!
当出现Elasticsearch+kibana连接失败时的处理方法
基本上看起来不错,但这些需要改变吗?
network.host: 0.0.0.0
http.cors.allow-origin: "*"
http.cors.enabled: true
action.auto_create_index: true
提示
如果收到”vm.max_map_count不足”的提示
sudo sysctl -w vm.max_map_count=262144
在Ubuntu Linux上安装Elasticsearch 5.0.0和Kibana 5.0.0,请添加星标。
如果直接从下载的东西中正常启动的话
选择配置文件以启动弹性集群。
./bin/elasticsearch -Epath.conf=/path/to/my/config/
kibana.yml的配置文件
如果您希望通过后面提到的反向代理进行访问,请进行以下更改。
server.basePath: "/kibana"
mongod.conf配置文件
我的RS是一个任意的副本集名称。
您可以选择使用命令 mongod –replSet myRS 来启动,或在mongod.conf文件中进行设置。
replication:
replSetName: myRS
请把港口整理得好一点。
接下来,使用mongo命令连接到其中一个。
config = {_id: 'myRS', members: [
{_id: 0, host: 'localhost:27017'},
{_id: 1, host: 'localhost:27018'},
{_id: 2, host: 'localhost:27019', arbiterOnly:true}
]
}
rs.initiate(config)
rs.status()
如果只是临时应付的话,随便制作一个复制品。
mkdir rs1
mongod --dbpath rs1 --port 27018 --replSet myRS --logpath rs1log --fork
mkdir rs2
mongod --dbpath rs2 --port 27019 --replSet myRS --logpath rs2log --fork
当您希望完全删除复制设置并重新设置时
在dbpath的位置
rm -f local.*
rm -f mongod.lock
MongoDB的副本集创建和重构
想要重建的时候
当删除从机数据并启动副本集时,将重新构建。
从外部访问Kibana
使用nginx作为反向代理
使用 Nginx 的反向代理来访问 Kibana。
仅使用代理传递(proxy_pass)和重写(rewrite)即可运作。
location /kibana/ {
proxy_pass http://localhost:5601;
rewrite /kibana/(.*)$ /$1 break;
auth_basic "welcome to Kibana";
auth_basic_user_file "/usr/local/nginx/.htpasswd";
}
为了后续的基本认证,我们做了一些补充。
基本认证
因为x-pack需要付费才能进行认证,我们只能不得已使用基本认证。
如前所述,在 /usr/local/nginx/.htpasswd 中写入 id:pw。
我们可以使用htpasswd命令来进行,但也可以在http://www.luft.co.jp/cgi/htpasswd.php上完成。
Mongo-connector的中文释义:Mongo连接器。
将MongoDB的数据同步到elasticsearch中。
建立复制品集是必需的。
pip install 'mongo-connector[elastic5]'
pip install 'elastic2-doc-manager[elastic5]'
将MongoDB的数据实时同步到Elasticsearch
如果在中途中断了或者一开始就想做的时候,可以删除oplog.timestamp。
举例来说,如果是Linux操作系统的话,它就在这附近。
sudo rm /var/log/mongo-connector/oplog.timestamp
Mongo-Connector会检查oplog.timestamp来确定同步到了哪个位置。
换句话说,即使mongo-connector突然崩溃,只要重新启动它,它将同步到最新的状态。
如果想要從頭開始並刪除所有數據,是否還需要刪除mongodb_meta?
在Kibana的Dev Tools的控制台中
DELETE YOUR_NAME_SPACE
DELETE mongodb_meta
同一时间完成,但是需要添加命名空间。
由于_id被设为主键,即使删除oplog.timestamp并重新开始操作,数据不会重复插入,但会增加重新插入的处理成本。
将其转化为守护进程
按照 https://github.com/mongodb-labs/mongo-connector/wiki/Installation 中的说明,使用setup.py进行安装。
sudo python setup.py install_service
sudo chmod +x /etc/init.d/mongo-connector
sudo /etc/init.d/mongo-connector start
在这个时候,同一目录下的config.json会复制到/etc/mongo-connector.json,因此以后会参考那个文件。
在这种情况下,需要注意的是,在名为 scripts/mongo-connector 的脚本中,有一行命令为 /usr/bin/python -m mongo_connector.connector。但是,根据环境的不同,可能需要将其更改为 /usr/bin/python3。
配置文件.json
mongo-connector --config-file=config.json
当将”rename”改为”hoge.wifi_log”时,索引将会以”hoge”命名,无法在wifi_log中命名索引。请注意。
所以,由于hoge成为了父节点。当想要为wifi_log单独贴上索引时,可以按照以下示例将其分开。
由于可以在Kibana上进行后续的索引,因此即使分开也是可以的。
可以参考这些内容:https://github.com/mongodb-labs/mongo-connector/wiki/Configuration-Options。在Linux操作系统下,例如,
{
"mainAddress": "localhost:27017",
"oplogFile": "/var/log/mongo-connector/oplog.timestamp",
"verbosity": 1,
"logging": {
"type": "file",
"filename": "/var/log/mongo-connector/mongo-connector.log",
"__rotationWhen": "D",
"__rotationInterval": 1,
"__rotationBackups": 10
},
"namespaces": {
"hoge.wifi_log": {
"rename": "hoge-wifi_log.hoge-wifi_log"
}
},
"docManagers": [
{
"docManager": "elastic2_doc_manager",
"targetURL": "localhost:9200"
}
]
}
备份和恢复
如果您想完整备份和恢复Kibana配置,可以使用elasticsearch-dump工具。
备份 是重要的。
elasticdump --input="http://localhost:9200/.kibana" --output=kibana_config.json
恢复是
elasticdump --input=kibana_config.json --output="http://localhost:9200/.kibana"
在Kibana的管理中心的“已保存对象”中,似乎可以将所有设置导出,但是这样做的话,索引模式等并不会被导出。
最终设定的实体位于elasticsearch的.kibana下,因此可以使用elasticsearch-dump命令将localhost:9200/.kibana进行导出。而还原则是相反的操作。
提示
查看Elasticsearch索引的状态
在Kibana的开发工具中的控制台中
GET _cat/indices
在Kibana中无法使用以下划线开头的字段
默认情况下,以下划线开头的字段无法用作索引。
所以,当您在 Kibana 的管理菜单下的高级设置中的 metaFields 中添加该字段名称时,您将能够将其选择为时间。
Elasticsearch的图形用户界面工具
最後没有使用
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start