Elasticsearch2.3とkibana4.5でドハマリしたあなたに送る1分で動く一発スクリプト

GYAOの窓際エンジニア　玉利です。


ベトナム漬けの毎日なのですが、片手間で日本側のサービス開発もやらなきゃいけません。どっちが片手間かというと、会社的には日本側の業務が主務っぽいのですが、実際に手間がかかるのはベトナム。。。とやりとりをするための日本側業務なんですが。

で、そろそろ放置していた自分の担当部分が燃え始めました。監視システムの構築、当初はGoogle Cloud Platformを使ってStackDriverの予定だったのですが、事情でつかわなくなり、NewRelicではログ回りを引っ掛けるのが難しく（コストかければ別ですが）、DATADOGもログ監視は苦手そうです。


というわけで、ありがちなElasticsearch + logstash + kibanaの設定に逆戻りしました。

# セットアップでハマる

個人で長く「さくらインターネット」のサービスを利用しているのですが、こちらのドキュメントもなかなか親切ですね。15分でできるというあたりが素晴らしいです。
http://knowledge.sakura.ad.jp/tech/2736/

また、各所にあるインストール記事を参考にしました。
ところが、色気をだして最新版を入れた所、見事にハマりました。

## 問題1 Elasrticsearch2.3が、ブラウザから開けない

ありがちなheadプラグインを指定しています。動作試験でcurl http://localhost:9200 を叩くとOKですが、ブラウザで http://${HOSTNAME}:9200/ が反応しません。

デフォルトでは127.0.0.1しかlistenしておらず、以下の設定が必要でした。たしかにMacのローカルで試すなら、この設定は要らない。
```/etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
```

## 問題2 kibanaが認証エラー

おかしい、たしか以前試した時はこんなことは無かったはずなのですが、kibanaがつながりません。正確には、kibanaがelasticsearchにつながりません。

```エラーメッセージ
Courier Fetch Error: unhandled courier request error: Authorization Exception
```

探してみたら、ありました。最近のバージョンの組み合わせの問題のようです。

https://github.com/elastic/kibana/issues/6719

https.cors.enabledは以前はkibana設定に必要だったようで、あちこちのドキュメントに記載されていますが、こちらはコメントアウトしてください。

```/etc/elasticsearch/elasticsearch.yml
# http.cors.enabled: true # kibana4.5 is not work on ES2.3 so please comment out here
```

# そして、一発スクリプト作成

私は以前にYahooの広告システムの運用をやってたので、当時5,000くらいを3人で運用させられてました。相当寿命が縮まりました。修理するのに手作業でやってると死ねます。こういう手順は、例外なくシェルスクリプト化するのが私の流儀です。

ここまできていればchefに喰わせるのも難しくないのですが、シェルスクリプトのほうがコピペ一発で動くと思いますのでシェルスクリプトで公開します。

動作は無保証です。対象OSはCentOSです。細かい部分はごめんなさい。適宜書き換えてelasticsearchのクラスタなど設定してください(host1,host2部分など)


```elasticsearch-logstash-kibana-setup.sh
#!/usr/bin/env bash

echo 'Elasticsearch/logstash/kibana Auto setup script for logcol[01-02].subdomain'
echo "Copyright GYAO Corporation `date +%Y`"
echo "Author: Bungo Tamari"

sudo yum install -y java
sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

cat << EOS |sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOS

sudo yum install -y elasticsearch
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

sudo mv /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.orig && \
cat << EOS |sudo tee  /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
http.port: 9200
node.name: ${HOSTNAME}
cluster.name: log_collector
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: [host1,host2] # please change here
# http.cors.enabled: true # kibana4.5 is not work on ES2.3 so please comment out here
EOS

sudo -u elasticsearch /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
sudo -u elasticsearch /usr/share/elasticsearch/bin/plugin install royrusso/elasticsearch-HQ
sudo -u elasticsearch /usr/share/elasticsearch/bin/plugin install polyfractal/elasticsearch-inquisitor
sudo systemctl daemon-reload
sudo /etc/init.d/elasticsearch restart
sudo /etc/init.d/elasticsearch status
sudo /sbin/chkconfig --add elasticsearch


## logstash

cat << EOS |sudo tee /etc/yum.repos.d/logstash.repo
[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=http://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOS

sudo yum install -y logstash

### kibana


cat << EOS |sudo tee /etc/yum.repos.d/kibana.repo
[kibana-4.5]
name=Kibana repository for 4.5.x packages
baseurl=http://packages.elastic.co/kibana/4.5/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOS

sudo yum install -y kibana
sudo chkconfig --add kibana
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo /etc/init.d/kibana restart

echo 'please check'
echo "http://${HOSTNAME}:9200/_plugin/head/"
echo "http://${HOSTNAME}:5601"
```

動かすと1分ですが、調整含めて作るのに数時間かかりますね。あとはベトナムに渡してログ管理について勉強してもらいますか。