概要
kibanaでビジュアライズしたかったので、構築手順のメモ
全体の流れを簡単に言うと、MongoDBにあるログをElasticsearchに同期して、Kibanaでビジュアライズし、さらにkibanaの設定(Index PatternとかSaved Objectsとか)をexport/importする手段についてメモる。
環境
- 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/06現在)ため、わざと5にしている。
elasticsearchとkibanaインストール
なおMongoDBは各自適当にインストールしてください。
後述するレプリカセットの設定は必須です。
Ubuntuの場合
elasticsearch
ElasticsearchをUbuntu 14.04にインストールする
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
Download Kibanaから適当に
CentOSの場合
elasticsearch
Elasticsearch を yumでインストール (CentOS)
Install Elasticsearch with RPM
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo yum install elasticsearch
sudo /etc/init.d/elasticsearch restart
kibana
適当にDownloadしてもいいが、yumでも入れられる
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.yml
Elasticsearch導入前に気を付けておきたいこと!
Elasticsearch+kibanaでConnection Failedが出た時の対処法
基本的にはそのままで良さげだが、これらは要変更した方が良い?
network.host: 0.0.0.0
http.cors.allow-origin: "*"
http.cors.enabled: true
action.auto_create_index: true
tips
vm.max_map_count
が足りないとか言われたら
sudo sysctl -w vm.max_map_count=262144
Ubuntu LinuxにElasticsearch 5.0.0、Kibana 5.0.0をインストールするAdd Star
ダウンロードしてきたやつから普通に起動するなら
Choosing configuration file to start elastic cluster
./bin/elasticsearch -Epath.conf=/path/to/my/config/
kibana.yml
後述のリバースプロキシでアクセスしたいなら、以下の変更
server.basePath: "/kibana"
mongod.conf
myRS は任意のレプリカセット名
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
再構築したい時
スレーブのデータを全部削除してレプリカセットな起動をすると再構築される
kibanaを外からアクセス
nginxでリバースプロキシ
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";
}
後述のbasic認証のために一部追記している
basic認証
x-packで認証かけられるが 有料 なので仕方なくbasic認証する。
先述したように /usr/local/nginx/.htpasswd
にid:pwを書く
普通にhtpasswdコマンドでやってもいいが、http://www.luft.co.jp/cgi/htpasswd.php でもできた
mongo-connector
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
要はoplog.timestamp
でどこまで同期しているのかをmongo-connectorが見ている。
つまり、mongo-connectorが突然死んだとしても、再度起動すれば最新まで同期してくれる。
全データ消して最初からしたい時はmongodb_metaも消す必要がある?
kibanaのDev ToolsのConsoleなどで
DELETE YOUR_NAME_SPACE
DELETE mongodb_meta
同期済みだけどnamespaceを追加する
_idがprimary keyとなっているため、oplog.timestamp
を削除して最初からやったとしても、重複してデータが入ることはないが、再挿入の処理が入るためコストはかかる。
daemon化
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
に変更する必要があるかもしれない。
config.json
mongo-connector --config-file=config.json
renameの部分をhoge.wifi\_log
にすると、indexはhogeで貼られて、wifi_logでは貼れないので注意。
つまりhogeが親になってしまうので。wifi_logはwifi_logだけでindexを貼りたい時は以下の例のようにして別々にする。
後からindexingは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のManagementのSaved Objectsから設定全部exportできるような雰囲気はあるが、これではIndex Patternsなどはexportされない。
結局設定の実体はelasticsearchの.kibanaの下に居るので、elasticsearch-dumpでlocalhost:9200/.kibana
をdumpする。リストアはその逆。
tips
elasticsearchのindexの状況とか見る
kibanaのDev ToolsのConsoleとかで
GET _cat/indices
kibanaでアンダーバー始まりのフィールド使えない
デフォルトだと、アンダーバーから始まるフィールドは、indexとして使えない。
なので、kibanaのManagement -> Advanced Settings -> metaFields にそのフィールド名を足すとtimeとして選択できるようになる。
elasticsearchのGUIツール
結局使ってない
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start