Hello world, @cero_t です。
少し肌寒い日が続きますが、皆さんいかがお過ごしでしょうか。
寒いのは決して僕のせいではないからね、そう周りに言い聞かせながら生き抜く日々です。
さて、
ついに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
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にしておけば警告はなくなります。
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ダッシュボードは、こんな感じで閲覧できます。
PacketbeatのHTTPダッシュボードは、こんな感じです。
こういうダッシュボードがすぐに出来るのは、本当に手軽で強いなと思いますね。
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-*」とすると良いでしょう。
これでindexパターンを作成すると、Discoverからindexに蓄積された情報を確認することができるようになります。
ここからさらに詳しい可視化をしたい場合には、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