Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elastic Stack 5.0.0 GAリリース! 早速インストール!! #elasticsearch

Hello world, @ です。
少し肌寒い日が続きますが、皆さんいかがお過ごしでしょうか。
寒いのは決して僕のせいではないからね、そう周りに言い聞かせながら生き抜く日々です。


さて、
ついにElastic Stack 5.0.0のGA版がリリースされました!!
https://www.elastic.co/jp/blog/elastic-stack-5-0-0-released

既にリリースされたalpha版やRC版などを触っていますが、2.x系から新機能が追加されただけでなく、性能や安定性、またユーザビリティが向上している体感があり、積極的にこの新版を使っていきたいと思っているところです。

Elastic Stack 5.0.0の新機能

公式ブログでもいくつか紹介されていますが、2.xから5.0ではピックアップしきれないほどの変更点があります。私なりに重要だと思っている新機能をいくつか紹介します。

Elasticsearch

https://www.elastic.co/blog/elasticsearch-5-0-0-released

  • 大幅な性能改善
  • Ingest Nodeにより、これまでLogstashが行なってきた加工処理ができるようになった
  • Stringの代わりにText/Keywordという型が導入された

性能改善によりKibanaのレスポンスが体感で変わりました。またIngest NodeのおかげでLogstashを使わない構成も取れるようになりました。特に小さな規模で動かす時には、Logstashを外すことも検討できそうです。

また、TextとKeywordについて、Textは単語分割されたいわゆる「analyzed」なフィールド、Keywordは単語分割されていない「not_analyzed」なフィールドです。Elasticsearchにデータを入れると、デフォルトで、このTextとKeywordの両方が保存されるようになりました。
2.x系を使っていた頃には「not_analyzedにしてなかったせいで、上手く検索できない!」とか「後からnot_analyzedに変更するのが大変すぎる!」なんて絶望したことがありましたが、5.0ではそんな目に遭うこともありません!

Kibana

https://www.elastic.co/blog/kibana-5-0-0-released

  • UIが大幅に変更された
  • SenseとTimelionが最初から組み込まれるようになった

Kibanaは見た目が一新され、グラフの表示エリアが広がりました。またSenseが「Console」という名前になって、最初から入る「Dev Tools」のひとつになりました。ほぼ必須のプラグインだったので、これも助かります。

Logstash

https://www.elastic.co/blog/logstash-5-0-0-released

  • モニタリングAPIが追加され、プロセスの情報や、パイプラインの状態などを取得できるようになった
  • 設定ファイルの自動再読み込みができるようになった(オプション)

Logstashの設定を行なう際、これまでは、設定ファイルを書いて、Logstashを立ち上げ(数秒掛かる!)、動作確認して、間違ってたら設定ファイルを直して、またLogstashを立ち上げ直して(だから数秒掛かる!)、という作業を繰り返さなくてはいけませんでした。
バージョン5.0では、設定ファイルの再読み込み機能を有効にすることで、Logstashを再起動しなくとも、設定が反映できるようになりました。特に初期構築時などに嬉しい機能ですね。

またLogstashにモニタリングAPIが追加されたことで、リソース情報などが取れるようになり、今後、X-Packのモニタリング機能でLogstashもモニタリングできるようになりそうです。

Beats

https://www.elastic.co/blog/beats-5-0-0-released

  • Metricbeatが登場。Topbeatの機能を持つほか、Apache、nginx、MySQL、MongoDBなどのメトリクスを収集できる
  • データを直接Kafkaに送信できるようになった
  • 不要なデータを送らないようフィルタできるようになった
  • Kibanaのダッシュボードを作るためのスクリプトが同梱されるようになった

最も大きな変更は、Kafkaにデータを送信できるようになったことでしょう。Kafkaを用いて情報収集の仕組みを安定化する際、システム構成をシンプルにできるようになりました。
また、Metricbeatにも注目です。Metricbeatは情報をpullで取りに行くエージェントで、今後も情報の取得先が増える見込みですし、自分でプラグインを書いて拡張することもできます。

Elastic Stack 5.0.0のインストール方法

それではElasicスタックのインストール手順を紹介します
5.0になってインストール周りが改善され、yumやapt-getを使ったインストールを行ないやすくなりました。
ここではAWS上のAmazon Linuxにインストールする想定で、手順を説明します。

事前準備

まずJava8(OpenJDK)をインストールします。
Elasticsearch 5.0からはJava 8以上が必要となり、またOpenJDKも正式サポートされるようになりました。

sudo yum update -y
sudo yum remove -y java-1.7.0-openjdk
sudo yum install -y java-1.8.0-openjdk-devel
sudo yum install -y java-1.8.0-openjdk-debuginfo --enablerepo=*debug*

なおOpenJDKは -devel を入れないとjinfoやjstatなどのコマンドが入りませんし、 -debuginfo を入れないとjinfoやjstatで情報を取れないので、これらをセットで入れておきましょう。これが入ってないと、トラブルシューターが激おこですよ。


続いて、yumでインストールできるようにするため、GPGキーのインポートと、リポジトリの定義を作成します。

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/elastic.repo

elastic.repo の内容は次の通りです。

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

これまでのバージョンではyumリポジトリがElasticsearch、Kibanaなど、プロダクトごとに分かれていたのですが、5.0ではこれが一つに統合されたため、スタック全体のバージョンを統一しやすくなりました。
ここまで済めば、後は各プロダクトをyumでインストールしていきます。

ElasticsearchとKibanaのインストール

yumコマンドでElaticsearchとKibanaをインストールします。

sudo yum install -y elasticsearch
sudo yum install -y kibana

Kibanaはインストール直後の状態ではlocalhostからのみアクセスできる状態となっているため、AWSなど外部のサーバにインストールした場合には、publicアクセスできるように設定を変える必要があります。

sudo vi /etc/kibana/kibana.yml

次の設定を追加します。

server.host: "0.0.0.0"


また、Elasticsearchも同様にlocalhostからのみアクセスできる状態なので、もし別サーバにBeatsやLogstashを置いてアクセスする場合には、同一ネットワーク内からアクセスできるよう設定する必要があります。

sudo vi /etc/elasticsearch/elasticsearch.yml

次の設定を追加します

network.host: _local_, _site_

ローカルホスト(_local_)と、同一ネットワーク帯(_site_)からのアクセスを許可する設定です。


ここまで済んだら、ElasticsearchとKibanaを起動します。

sudo service elasticsearch start
sudo service kibana start

起動後にブラウザで http://(サーバのアドレス):5601/ にアクセスして、Kibanaの画面が出たら成功です。


ちなみに画面遷移時に「Index Patterns: Please specify a default index pattern」というエラーメッセージが出るので、とりあえず「.kibana」をデフォルトindexにしておけば警告はなくなります。
f:id:acro-engineer:20161027124719p:plain

4.x系のKibanaを使っていた人にとっては、ずいぶん変わったなぁという印象ではないでしょうか。

Beatsのインストール

続いて、Beatsをインストールします。
ここでは例としてMetricbeatによるリソース情報の収集と、PacketbeatによるKibanaへのアクセス情報の収集を行います。


yumコマンドでインストールします。

sudo yum install -y metricbeat
sudo yum install -y packetbeat


続いて、PacketbeatでKibanaに対するHTTPアクセスを収集できるよう設定します。
設定ファイルを書き換え、KibanaがHTTPアクセスに使うポート番号を指定します。

sudo vi /etc/packetbeat/packetbeat.yml

packetbeat.yml

packetbeat.protocols.http:
  ports: [5601]

これで5601ポートを通るパケットの情報が解析され、Elasticsearchに送信できるようになります。

なおMetricbeatはインストールした直後の状態で、サーバのリソース情報を取得できるようになっているため、今回はこのまま利用します。


ところで、Beatsで取得した情報を可視化するためにはKibanaでダッシュボードを作成する必要があるのですが、Beatsにはサンプルのダッシュボードを作るためのスクリプトが用意されており、これを使ってダッシュボードを作ることができます。
別に、情報を収集してからダッシュボードを作っても構いませんが、今回は先に作っておきます。次のコマンドでダッシュボードを作成します。

cd /usr/share/metricbeat
sudo ./scripts/import_dashboards
cd /usr/share/packetbeat
sudo ./scripts/import_dashboards


設定が終わったら、Beatsをそれぞれ起動します。

sudo service metricbeat start
sudo service packetbeat start


Beatsを起動した後、しばらくKibanaで操作などしていれば、アクセス情報やリソース情報などがElasticsearchに蓄積されます。
蓄積された情報を見るため、Kibanaにアクセスして「Dashboard」の「Open」から、ダッシュボードを開いてください。


MetricbeatのProcessダッシュボードは、こんな感じで閲覧できます。
f:id:acro-engineer:20161027124800p:plain


PacketbeatのHTTPダッシュボードは、こんな感じです。
f:id:acro-engineer:20161027124807p:plain


こういうダッシュボードがすぐに出来るのは、本当に手軽で強いなと思いますね。

Logstashのインストール

最後に、Logstashも試してみましょう。
Logstashを用いてKibanaのログを読み込み、Elasticsearchに転送します。


まずyumコマンドでLogstashをインストールします。

sudo yum install -y logstash


続いてLogstashの設定ファイルを作り、Kibanaのログファイルを読みこむようにします。

sudo vi /etc/logstash/conf.d/kibana.conf

このような内容にします。

input {
  file {
    codec => "json"
    path => "/var/log/kibana/kibana.stdout"
    start_position => "beginning"
    sincedb_path => "/var/log/logstash/since_kibana"
  }
}

output {
  elasticsearch {
    index => "kibana_access-%{+YYYY.MM.dd}"
    document_type => "%{type}"
  }
}

KibanaのログはJSON形式で出力されているため、codecにjsonを指定さえすれば、特にfilter処理を書く必要はありません。


設定が終わったら、Logstashを起動します。起動コマンドが他のサービスと少し異なっている点に注意してください。

sudo initctl start logstash


これで、Elasticsearchのkibana_access-(日付) というindexにアクセス情報が蓄積されます。
この情報を見るために、まずKibanaのメニューの「Management」からIndex patternを追加します。名前は「kibana_access-*」とすると良いでしょう。
f:id:acro-engineer:20161027124813p:plain


これでindexパターンを作成すると、Discoverからindexに蓄積された情報を確認することができるようになります。
f:id:acro-engineer:20161027124832p:plain


ここからさらに詳しい可視化をしたい場合には、Kibana上でグラフやダッシュボードを作る必要があります。

ちなみにここではLogstashで読み込む方法を紹介しましたが、実は今回のパターンではLogstashを使う必要はなく、Filebeatだけで済ませることができます。というのもKibanaのログはJSON形式で出力されており、Filebeat 5.0の「1行 1JSON」形式のファイルを読み込む機能を使えば、きちんと処理できるためです。
Logstashはもう少し複雑なログの解析や、転送先が複数ある時などに使うと良いでしょう。

まとめ

Elasticスタック5.0は、新機能追加に加え、性能や安定性、ユーザビリティなどが向上しています。
yumでのインストールもさらに簡単になり、導入しやすくなりました。

まだ使っていない人は、ぜひこの機会に挑戦してみてください。
とは言え、まだ出て間もないですからね、実案件への導入は計画的に!

告知

2016年11月18日(金) に、Spring Day 2016というイベントが東京で開催されます。
私も「Let's Visualize Your Spring Cloud Applications!」というタイトルで、Elasticスタックを使ったマイクロサービスの可視化について具体的な手法や、アーキテクチャなどを紹介する予定です。ぜひご参加ください!
springday2016.springframework.jp


それでは、
Enjoy elastic, see you!


AcroquestではElasticsearch、Logstash、Kibanaの無償ハンズオンセミナーを開催しています。


当社公認エンジニアがElasticsearchの基礎から、商用プラグインの利用、
実データを用いた可視化・分析までを、ハンズオン形式で説明致します。
ハンズオンでは最新バージョンであるElasticスタック5.0を利用します。


詳細・参加応募はこちらからお願いします。
www.acroquest.co.jp