Hello world, @cero_t です。
突然ですが、SpringOneのスピーカーになることが決まりました!
SpringOneは、毎年行われるSpring界隈で最大のイベントです。今年8月にラスベガスで開催されます。
springoneplatform.io
発表内容は、Elasticsearchを用いたSpring Bootアプリケーション(というかマイクロサービス)の可視化です。
Schedule: Let's Visualize Your Spring Boot Applications - SpringOne Platform
どういう内容になるか、ご期待ください! 要するに、まだちゃんと考えていません!
さて、そんな前振りをしつつ、今日はElastic Stack 5.0のalpha版のお話です。
Elasticsearch / Kibana / Logstash / BeatsのElasticスタックは、次のリリース時にバージョンが「5.0」で統一されます。
先日、そのalpha 3がリリースされたため、これをインストールして試してみます。
Elastic Stack 5.0 alphaの特徴
これまでこのブログでは、Elastic Stack 5.0 alphaについて話題にしてこなかったため(更新サボっててすみません!)、簡単に各バージョンの見どころを書いておきます。
alpha 1
https://www.elastic.co/jp/blog/elastic-stack-release-5-0-0-alpha-1
- 5.0 alpha 最初のリリース。
- ElasticsearchのIngest Node(Logstashのfilterのような文字列加工機能)が使えるようになりました。
- Kibanaが新しいデザインになりました。
- Logstashのメトリクス情報を取得できるようになりました。
- Beatsから直接Kafkaに出力できるようになりました。
alpha 2
https://www.elastic.co/jp/blog/elastic-stack-release-5-0-0-alpha-2
- ElasticsearchとLogstashがIPv6アドレスを扱えるようになりました。
- Kibanaにsenseが標準搭載されました。
alpha 3
https://www.elastic.co/jp/blog/elastic-stack-release-5-0-0-alpha-3
- Beatsシリーズに「Metricbeat」が追加されました。
- Kibana + X-Packに、ユーザ管理画面が追加されました。
- Logstashにプラグインジェネレータが搭載されました。
という感じです。
基本的には、alpha版はお試しという位置づけなので、最新のものを使っていれば良いと思います。
1. 前準備
それでは、インストールを行ないましょう。
今回はAWSで、Amazon Linux 2016.03のt2.smallで試しました。
まずは前準備として、Java8(OpenJDK)とdstatをインストールします。
この辺りは僕の好みなのでスキップしても構いませんが、Javaで問題があった時に解析できるようにopenjdk-develとopenjdk-debuginfoを入れることと、リソースの確認ツールとしてdstatを入れることを、いつもやっています。
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* sudo yum install -y dstat
これで準備は完了です。
2. ElasticsearchとKibanaをyumでインストール
Amazon Linux(CentOS/RHEL)にElasticスタックをインストールする方法は3つあります。
運用のしやすさを考えれば2か3がよく、特に3のyumでインストールをしておけば、アップデートの際にもyum updateで済むので、今回はそれでインストールします。
まずはRPMの公開鍵のインポートと、リポジトリの定義作成です。
sudo rpm --import https://packages.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://packages.elastic.co/elasticsearch/5.x/centos gpgcheck=1 gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch enabled=1 [kibana-5.x] name=Kibana repository for 5.x packages baseurl=http://packages.elastic.co/kibana/5.0.0-alpha/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1 [logstash-5.x] name=Logstash repository for 5.x packages baseurl=http://packages.elastic.co/logstash/5.0/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
なおBeatsだけは5.0系のリポジトリが見つからなかったため、yumインストールを諦めました。
ElaticsearchとKibanaをインストールして、自動起動の設定をしておきます。
sudo yum install -y elasticsearch sudo yum install -y kibana sudo chkconfig --add elasticsearch sudo chkconfig --add kibana
ちなみにElasticsearch 5.0 alpha 2では、依存モジュールの問題で、Amazon Linux上でyumインストールしようとすると失敗する問題がありましたが、alpha 3では修正されています。
インストールが終わったら、ElasticsearchとKibanaのサービスを立ち上げます。
sudo service elasticsearch start sudo service kibana start
このあとブラウザで http://(サーバのアドレス):5601/ にアクセスして、Kibanaの画面が出たら成功です。
雰囲気がちょっと変わりましたね!
ちなみに、ここで他の画面を表示しようとすると「Index Patterns: Please specify a default index pattern」というエラーメッセージが表示されます。デフォルトのindexが指定されていないというエラーです。
何のためのエラーなのか、僕もいまひとつ理解していないのですが(←ちゃんとしろ!)とりあえずサイズの小さい「.kibana」をデフォルトindexにすることにしています。
これで設定しておけば、エラーは起きなくなります。
3. Beatsを使ってリソース情報を可視化
続いて、Beatsをセットアップをします。
Beatsの5.0 alpha 3では目玉機能として、Metricbeatが追加されました。
www.elastic.co
MetricbeatはApache、nginx、MySQL、Redisなどのサーバ状態を収集してElasticsearchに転送するものです。それに伴ってTopbeatが廃止され、Topbeat相当の機能がMetricbeatに移植されました。
今回は、このMetricbeatとPacketbeatをインストールして、リソース情報を可視化します。
先にも書きましたがBeatsはyumでインストールできないため、rpmパッケージをダウンロードしてインストールします。
curl -L -O https://download.elastic.co/beats/metricbeat/metricbeat-5.0.0-alpha3-x86_64.rpm sudo rpm -vi metricbeat-5.0.0-alpha3-x86_64.rpm sudo chkconfig --add metricbeat curl -L -O https://download.elastic.co/beats/packetbeat/packetbeat-5.0.0-alpha3-x86_64.rpm sudo rpm -vi packetbeat-5.0.0-alpha3-x86_64.rpm sudo chkconfig --add packetbeat
まずはMetricbeatでTopbeat相当の情報だけを取得するようにします。
デフォルトの設定のままでも動作するのですが、せっかくなので標準でOFFにされている情報も取得するようにします。
sudo vi /etc/metricbeat/metricbeat.yml
metricbeat.ymlの -core と -diskio と -fsstat がコメントアウトされているので、それぞれアンコメントします。
metricbeatのサービスを起動します。
sudo service metricbeat start
これでElasticsearchに情報が流れ始めます。
Elasticsearchに正しく情報が入っているかどうかはElasticsearchの /_cat/indices にアクセスして確認します。
curl localhost:9200/_cat/indices
次のようにMetricbeatのindexができていれば、Elasticsearchへの転送は成功です。
yellow open metricbeat-2016.06.03 5 1 89 0 19.2kb 19.2kb
yellow open .kibana 1 1 2 0 3.8kb 3.8kb
またElastic Stack 5.0から、Beatsのダッシュボードを作成するためのスクリプトが、各Beatsのkibanaフォルダに置かれるようになりました。rpmでインストールした場合は /usr/share/(Beats名)/ がインストールフォルダとなります。ここにある import_dashboards.sh を実行すると、ダッシュボードが作成できます。
これを使って、Metricbeatのダッシュボードを作成しましょう。
cd /usr/share/metricbeat/kibana sudo ./import_dashboards.sh
これでMetricbeatのダッシュボードが、Kibanaに作成されました。
Kibanaにアクセスして、左メニューからダッシュボードを開き、上部のメニューの「Open」から「Metricbeat System Statistics」を開くと、収集した情報が表示されます。
こんな感じのダッシュボードが数分でできるのは、本当にお手軽でいいですよね。
ついでに、Packetbeatも同じように設定しておきましょう。Packetbeatはネットワークインタフェースに流れるパケットをキャプチャして、アクセスを解析するツールです。ApacheやnginxなどのHTTPや、MySQL、PostgreSQL、MongoDBなどのパケットに対応しています。
このPacketbeatを使って、ElasticsearchとKibanaに対するHTTPアクセスを収集します。
設定ファイルを書き換えて、HTTPに使うポート番号を指定します。
sudo vi /etc/packetbeat/packetbeat.yml
packetbeat.yml
packetbeat.protocols.http: ports: [5601, 9200]
5601と9200が、それぞれKibanaとElasticsearchのHTTP待ち受けポート番号です。
Packetbeatのサービスを起動して、またダッシュボードもMetricbeatと同じように作成しておきます。
sudo service packetbeat start cd /usr/share/packetbeat/kibana sudo ./import_dashboards.sh
これでPacketbeatのダッシュボードができました。
「Packetbeat HTTP」というダッシュボードを開くと、HTTPアクセス記録を確認できます。
特にアクセスログ解析をしたわけでもなく、パケットに流れる情報だけでこのようなダッシュボードを作れるのは、ホント便利ですね。
4. Logstashでログ情報の収集
せっかくなので、Logstash 5.0 alphaも試してみましょう。Logstashを使ってKibanaのアクセスログを収集します。
インストールはyumコマンドで行ないます。
sudo yum install -y logstash
Logstashは5.0 alpha 3から /etc/init/logstash.conf に自動起動設定が置かれるため、chkconfigを行なわなくとも自動起動されるようになります。
設定ファイルを修正して、Kibanaのログファイル(JSON形式)を読み込んで、Elasticsearchに転送するようにします。
sudo vi /etc/logstash/conf.d/kibana.conf
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}" } }
書式などはこれまでと変わっていません。
serviceコマンドではなく、initctlコマンドを用いてLogstashを起動します。
sudo initctl start logstash
こういう仕組み(Upstart)を知らなかったので、若干、戸惑いました。
LogstashからElasticsearchに正しく情報が入っていることを、index一覧を見て確認します。
curl localhost:9200/_cat/indices
次のようにkibana_access-yyyy.MM.ddというファイルが出来ていれば成功です。
yellow open .kibana 1 1 100 1 166.6kb 166.6kb
yellow open packetbeat-2016.06.03 5 1 20384 0 7.2mb 7.2mb
yellow open metricbeat-2016.06.03 5 1 20126 0 5.9mb 5.9mb
yellow open kibana_access-2016.06.03 5 1 324 0 496.9kb 496.9kb
あとはKibana上でindex定義をしたり、ダッシュボードを作成すれば良いのですが、手順は割愛します。
まとめ
- Elasticスタック 5.0 alphaも、yumでインストールできます。
- Beats 5.0 alpha 3でMetricbeatが追加され、Topbeatはなくなりました。
- 各Beatsのフォルダ内にある「kibana」フォルダのスクリプトを使ってダッシュボードが作れます。
- Logstash 5.0 alpha 3はUpstartで起動するため、若干、起動の仕方が変わりました。
紹介しきれなかった5.0の新機能や、X-Packなんかは、また改めて紹介したいと思います。
それではまた、
See you!
Acroquest Technologyでは、キャリア採用を行っています。
- 日頃勉強している成果を、AWS、Hadoop、Storm、NoSQL、Elasticsearch、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
- 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
- OSSの開発に携わりたい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
データ分析で国内に新規市場を生み出す新サービス開発者WANTED! - Acroquest Technology株式会社の新卒・インターンシップ - Wantedlywww.wantedly.com