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
bannerAds