Kibanaの使い方 〜環境準備〜【Amazon Elasticsearch Service】

2017.12.25

どうも!大阪オフィスの西村祐二です。

アクセスログや、さまざまなログをAmazon Elasticsearch Serviceに配信し、Kibanaで可視化するということがよくあると思います。

下記ブログではじめて触ったのですが、すごく使い勝手がよく、使いこなせるようになりたいなと思ったので、 個人的な備忘録も兼ねて、何回かに分けてKibanaの使い方をまとめていきたいと思います。

今回はKibanaを使うための環境準備となります。

(本ブログは2017/12/25時点の内容となります)

Lambda関数の実行アクティビティをAmazon Elasticsearch Serviceへ配信してみる – ClassmethodサーバーレスAdvent Calendar 2017 #serverless #adventcalendar #reinvent

環境

  • サービス:Amazon Elasticsearch Service
  • Elasticsearch:6.0
  • Kibana:6.0.1

Amazon Elasticsearch Serviceの設定

Kibanaを利用するために、Amazon Elasticsearch Serviceの設定を行っていきます。

▼マネージメントコンソールから作成していきます。 Elasticsearchのドメイン名は、今回「test-es」として作成します。

▼インスタンスタイプは「t2.small.elasticsearch」としています。

▼ストレージの設定はデフォルトのままです。

▼アクセスの設定は パブリックアクセスとして、アクセスポリシーを特定のIPのみ許可するように設定しています。

▼作成が完了したら、下記リンクをクリックしKibanaにアクセスします。

▼Kibanaにアクセスできたら、下記画面に移動しているかと思います。

動作確認

Kibanaで可視化するためには、Elasticsearchへデータを取り込む必要があります。

Amazon Elasticsearch Serviceドメインにデータをアップロードするには、コマンドラインから Elasticsearch REST API の index および bulk を使用します。

注意点として、Headerを明示的に指定しないとエラーとなります。

Amazon Elasticsearch Service で Elasticsearch 6.0 が利用可能になりました

今回、下記映画の情報をPUTしてみたいと思います。

対象データ

{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}

実行コマンド

# curl -H "Content-Type: application/json" -XPUT https://search-test-es-XXXXXXXXXXXXXXX.ap-northeast-1.es.amazonaws.com/movies/movie/1 -d '{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}'

{"_index":"movies","_type":"movie","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

データのPUTがうまくいったら、 次は「mars」という単語を検索してみます。

# curl -XGET 'https://search-test-es-XXXXXXXXXXXXXX.ap-northeast-1.es.amazonaws.com/movies/_search?q=mars'

{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":0.2876821,"hits":[{"_index":"movies","_type":"movie","_id":"1","_score":0.2876821,"_source":{"director": "Burton, Tim", "genre": ["Comedy","Sci-Fi"], "year": 1996, "actor": ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"], "title": "Mars Attacks!"}}]}}%

Kibanaからも検索し、PUTしたデータが表示されるか確認します。

サンプルデータをElasticsearchに取り込む

公式ドキュメントにサンプルデータがあります。 これを使って可視化していきます。

下記ファイルをローカルにダウンロードしてください。

  • shakespeare.json
  • シェイクスピアの作品をフィールド毎に解析したjsonデータ。
  • accounts.zip
  • ランダムに生成された架空のアカウントデータ。
  • logs.jsonl.gz
  • ランダムに生成された一連のログデータ。

ファイルを解凍します。

# unzip accounts.zip

# gunzip logs.jsonl.gz

データを取り込みます。

# curl -H 'Content-Type: application/x-ndjson' -XPOST 'https://search-test-es-XXXXXXXXXXXXX.ap-northeast-1.es.amazonaws.com/bank/account/_bulk?pretty' --data-binary @accounts.json
# curl -H 'Content-Type: application/x-ndjson' -XPOST 'https://search-test-es-XXXXXXXXXXXXX.ap-northeast-1.es.amazonaws.com/shakespeare/doc/_bulk?pretty' --data-binary @shakespeare_6.0.json
# curl -H 'Content-Type: application/x-ndjson' -XPOST 'https://search-test-es-XXXXXXXXXXXXX.ap-northeast-1.es.amazonaws.com/_bulk?pretty' --data-binary @logs.jsonl

{"Message":"Request size exceeded 10485760 bytes"}のようなメッセージが出力されたと思います。 これはインスタンスタイプによってサポートされている最大の HTTP リクエストペイロードの制限があり、それにひっかかってるためです。 HTTP リクエストペイロードが100MBの「c4.xlarge.elasticsearch」に変更して 再度コマンドを実行しましょう。

参考ドキュメントはこちらです。

▼データの取り込みが完了したら、マネージメントコンソールから取り込んだデータのインデックスが確認できます。 「bank」「shakespeare」「logstash」が確認できます。

これで準備完了です。

さいごに

いかがだったでしょうか。 Kibanaを使うための、Amazon Elasticsearch Serviceの設定とデータの取り込みを行いました。

次はいよいよKibanaを使っていきます。