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.cors.enabledは以前はkibana設定に必要だったようで、あちこちのドキュメントに記載されていますが、こちらはコメントアウトしてください。
# 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部分など)
#!/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分ですが、調整含めて作るのに数時間かかりますね。あとはベトナムに渡してログ管理について勉強してもらいますか。