EC2 で Elasticsearch + kibana
何番煎じかって話ですが、やってみて初めて分かることもあるのでまとめてみます
EC2でelasticsearchのクラスタ構成+kibanaをやりましょうってやつです
結局以前使ったansibleにちょっと修正を加えてやることにしました
まぁEC2に限らずって話もありますがどこかで誰かのお役に立てればと思います
サーバ構成
- 10.0.21.60(Elasticsearch master EBS)
- 10.0.21.61(Elasticsearch data EBS)
- 10.0.22.60(Elasticsearch data EBS)
- 10.0.1.10(reverse proxy)
- 10.0.1.11(kibana)
やったこと
- IAMRoleの設定
- インスタンス作成
- EBSのアタッチ
- pluginsのインストール
- elasticsearchの設定
IAMRoleの設定
- 最初適当に作ってから下記手順で編集しました
- InlinePolicy
- PolicyGenerator
- Effect: Allow
- AWS Service: Amazon EC2
- Actions: All Actions
- AmazonResourceName: *
それが下記
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1429609722000", "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": [ "*" ] } ] }
インスタンスの作成
- サービスとかによって違うと思うので割愛
- IAMRoleで作成したRoleを割り当ててあげます
- このIAMRoleはインスタンス作成時しか設定できないようなので忘れずに。。。
EBSのアタッチ
- elasticsearchのサーバで/data に100Gほど持たせました
- 下記参考
elasticsearchの設定
いろんなところで書いてあるけどmulticastでのノード探索ができないようなので作業が必要
pluginのインストール
/usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-cloud-aws/2.5.0
elasticsearch.ymlの修正
- groups
- Security Groups
- discovery.zen.ping.unicast.hosts
- これを設定しないとうまく動かなかった
- master,data全てのノードを記述
network.host: _ec2:privateIpv4_ discovery.zen.ping.multicast.enabled: false cloud.aws.region: ap-southeast-1 discovery: type: ec2 ec2: groups: elasticsearch availability_zones: ap-southeast-1a,ap-southeast-1b discovery.zen.ping.unicast.hosts: [10.0.21.61,10.0.22.60, 10.0.21.60]
クロスドメイン対策
- elasticsearch.ymlの修正
kibanaからのアクセスは問題ないが、htmlぺら1とかでjson投げて生ログ取りたいとかそういうときにただリクエスト送るだけだとうまくいかなかった
調べた結果クロスドメインに引っかかるようなのでそれ用の設定をelasticsearch.ymlへ追加
http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: GET,POST http.cors.allow-headers: true http.cors.allow-credentials: true
hostnameの設定
上記までの対応で起動はできたものの下記エラーが残ったままでした
java.net.UnknownHostException: ip-10-0-21-61: ip-10-0-21-61: unknown error ..... .....
- /etc/hostsの修正
調べてみた結果/etc/hostsに${hostname -s}を記述すればOKのようなので対処しました
- 127.0.0.1 localhost localhost.localdomain + 127.0.0.1 localhost localhost.localdomain ip-10-0-21-61
kibanaへのリバースプロキシ
今回kibana用にリバプロ用サーバを立てました
本当は「/kibana」でkibanaへリバプロするように設定したかったがstaticファイルのリクエストも設定に加えなくてはならないようだったので「/」でリバプロするように変更
理想はこんな感じ
nginx - kibana ( /kibana ) + growthforecast ( /gf ) + monitor ( /monitor )
- 調べた結果下記解決策がある模様
複数列挙できてもバージョンアップでファイルが追加されたら対応しないといけないし、正規表現頑張るのも工数かかりそうだしということで一旦断念。
おわり
elasticsearch.ymlの設定とnginxの設定で詰まったけど思ったよりかは楽に構築できた感。。。
- nginxの設定周りで結構詰まったのでもう少し勉強しないと。。
- kibanaの管理画面以外で生ログ検索したい
- luceneクエリじゃなくてテキストボックスに入力したら部分一致
- 結局サービス用に軽く作らないといけなそう。。。