ObjectRocketのElasticsearchでKibana 4をDockerコンテナで稼働させる方法

数百万件(あるいは数十億件!)にも及ぶElasticsearchのドキュメントを、見栄えの良いチャート・グラフ・テーブルに変換したいとお考えなら、答えはKibanaです。KibanaはElastic社が提供するプロダクトであり、Elasticsearchと密接に連携し、膨大なデータを直感的に分析するための使いやすいインターフェースを提供します。
現在、ObjectRocketのすべてのElasticsearchインスタンスにはKibana 3がプリロードされており、各HTTPエンドポイントの「/_plugin/kibana」からアクセスできます。しかし、Kibana 4には多くの改善点や新機能が導入されているため、ObjectRocketでは、作成されるすべてのElasticsearchインスタンスでKibana 4を利用できるよう準備を進めています。それまでのつなぎとして、本チュートリアルでは、Dockerコンテナ上で動作するKibana 4を使ってElasticsearchインスタンスに接続する手順をご紹介します。

前提条件
すでにDockerがインストールされており、ObjectRocketのElasticsearchインスタンスをお持ちであれば、すぐに始められます。DockerホストのIPアドレスがElasticsearchインスタンスのACLでホワイトリスト登録されていることを確認したうえで、後述の「DockerでKibana 4を実行する」セクションに進んでください。
Elasticsearch
まず、ObjectRocket上にElasticsearchインスタンスが必要です。まだお持ちでない場合は、Elasticsearchの利用開始に関する充実したドキュメントをご用意していますので、そちらをご参照ください。今回はDockerをローカル環境で実行するため、ACLに現在のIPアドレス(icanhazip.comで確認可能)を必ずホワイトリスト登録してください。インスタンスの起動後、Kibana 4から接続するために以下の情報が必要になります。
- HTTPS接続文字列:例えば「https://iad1-19999-0.es.objectrocket.com:29999」。HA(高可用性)構成のため、各インスタンスには接続可能なクライアントノードが4つありますが、このケースでは1つだけあれば十分です。
- 管理者ユーザーのユーザー名/パスワード:インスタンス上のadminユーザーの認証情報です。
Docker
現在、Dockerを始める最も簡単な方法はDocker Machineを使うことです。インストールと設定の手順は本記事の範囲外ですが、公式のスタートガイドが良い出発点になるでしょう。
DockerでKibana 4を実行する
Elasticsearchインスタンスがオンラインになり、Dockerもインストールできたところで、いよいよKibana 4を起動しましょう!
Docker Machineを使用している場合は、まず環境変数を適切に設定してください。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dockerbox virtualbox Running tcp://192.168.99.100:2376
$ eval "$(docker-machine env dockerbox)"
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES環境変数ファイルの作成
今回使用するKibana 4のDockerイメージ(objectrocket/kibana)では、Elasticsearchへの接続方法を認識できるよう、環境変数ELASTICSEARCH_URLを設定する必要があります。この例では、ホスト「iad1-19999-3.es.objectrocket.com」のポート29999(HTTPS)に、ユーザー名「alice」、パスワード「password」で接続します。
$ echo 'ELASTICSEARCH_URL=https://alice:password@iad1-19999-3.es.objectrocket.com:29999' > kibana4.env注記:これらの環境変数は「-e」フラグで直接渡すこともできますが、機密性の高い認証情報が含まれるため、envファイルに格納しておくのが賢明です。
コンテナの起動
次に、Kibana 4のコンテナを起動します。
# バインドポートを変更したい場合は `-p $PORT:5601` を使用
$ docker run -d --name kibana4 -p 5601:5601 --env-file kibana4.env objectrocket/kibana:4.1.2
Unable to find image 'objectrocket/kibana:4.1.2' locally
4.1.2: Pulling from objectrocket/kibana
8a648f689ddb: Pull complete
6a9f09112d11: Pull complete
98c91eb0b06a: Pull complete
f5030fbbffc3: Pull complete
0a7a2d9eb5d6: Pull complete
1f9563800fc7: Pull complete
f43ab0bd66e0: Pull complete
Digest: sha256:352e95077d0312fa12de6cec3bc66d221391952b8cf98e890cd7324b6b6605ce
Status: Downloaded newer image for objectrocket/kibana:4.1.2
cc341ff14d492a30e106007896201639964bdef6a93d03d497957a2738f5ac24アップデート:Elasticsearch 2.0以降をお使いの場合は、「objectrocket/kibana:4.2.0」以上のイメージを使用する必要があります。
コンテナの作成後、「docker ps」の出力に表示されているはずです。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc341ff14d49 objectrocket/kibana "/opt/kibana/run.sh" About a minute ago Up About a minute 0.0.0.0:5601->5601/tcp kibana4コンテナの起動に問題がある場合は、ELASTICSEARCH_URL変数を見直し、URLの各部分が正しいか確認してください。また、「@」や「:」などの記号を含むパスワードはURLスキームを壊してしまう可能性がある点にもご注意ください。「docker logs kibana4」コマンドを実行すれば、Kibanaがstdoutやstderrに出力したエラーメッセージを確認することもできます。
Kibana 4への接続
これで、Dockerホストのポート5601(前のステップで別のポートを選択した場合はそのポート)からKibana 4に接続できるはずです。ローカルで実行している場合は「https://localhost:5601」にアクセスしてください。Docker Machineを使用している場合は、「docker-machine ip」で取得できるVMのIPアドレスを使い、例えば「https://192.168.99.100:5601」にアクセスします。
接続に成功したら、KibanaがElasticsearchインスタンスのインデックスを使用するように設定を行います。詳細については、Elastic社の「Connect Kibana with Elasticsearch」ドキュメントをご参照ください。また、Kibana 4の主要機能について詳しく知りたい方は、「Getting Started with Kibana」ガイドを読むことをおすすめします。
まとめ
Kibanaでの可視化作業が完了したら、以下のコマンドでDockerコンテナを停止できます。
$ docker stop kibana4
kibana4次回再度接続したいときは、「docker start kibana4」を実行するだけで準備完了です。
前述のとおり、Elasticsearch製品向けのホステッド型Kibana 4の提供も進めていますが、それまでの間はローカルでKibanaを実行することで素早く始められます。さらに、Kibanaはすべての設定をElasticsearchのインデックスに保存するため、切り替え時にお気に入りのダッシュボードや可視化設定を失う心配もありません!
-
FilebeatとElasticsearch Ingest PipelineによるCSVファイル解析の実践ガイド
Elasticsearch 5の最も注目すべき新機能のひとつがingest nodeです。この機能により、Logstashスタイルの処理をElasticsearchクラスター内で実現でき、別途サービスやインフラを用意することなく、データをインデックス化する前に変換処理を行えます。以前、LogstashでCSVファイルを解析する方法についての記事を公開しましたが、本記事では比較のため、そのingest pipeline版をご紹介します。ここでは、Filebeatを使ってデータをingest pipelineへ送信し、インデックス化したうえで、Kibanaで可視化するまでの一連の手順を解説します。
-
FluentdとObjectRocketで実現するハイブリッドクラウドのログ集約
本記事は Hart Hoover と Ryan Walker による共著です。New RelicアラートをRackspaceサポートへ連携するサービスRackspace の DevOps Automation チームは最近、New Relic から発せられたアラートを Rackspace サポートに通知する新しいサービスを発表しました。このサービスでは、アラートが発生すると自動的にチケットが作成され、DevOps エンジニアが対応します。たとえ深夜3時にアラートが発生しても、お客様は安心して眠ることができるのです。さらに、お客様の環境から収集した他のデータポイントと組み合わせることで、エンジニ