LoginSignup
6
3

More than 3 years have passed since last update.

Elasticsearch の index template を作成して適用するまで

Posted at

背景

j-yamaさんの記事を大いに参考にさせていただき、ELKの勉強をしていたところ、index template まわりでつまづいたので、メモ

環境

j-yamaさん配布の docker-compose をそのまま使いました。

3コマンドで環境構築完了なので、j-yamaさんと git と docker には感謝しかありません。

実行したコマンド↓

git clone https://github.com/j-yama/logstash-http-poller-input-plugin-example
cd logstash-http-poller-input-plugin-example
docker-compose up -d

本題

さて、本題の index template の作成方法および適用方法についてです。

index template でやりたいこと

インデックスのとあるフィールドのデータ型を定義したい。

今回定義したい内容:
- 対象インデックス: nasa-yyyy.mm.dd
- 対象フィールド: events.geometries.coordinates
- 指定するデータ型: geo_point(位置情報を表す)

index template を使わずにインデックスを作成したところ、number という数値データとして認識されてしまったため、明示的にデータ型を指定しておく必要がある。

このように、index template を使うと、Elasticsearch に作成されるインデックスをあらかじめ定義しておくことができる。(と認識している)

手順

  • index template 適用前の状態確認
  • index template の作成
  • index の再作成
  • index_pattern の再作成
  • index template 適用後の状態確認

前提:上記の環境で正常に Logstash、Elasticsearch、Kibana が動作していること

index template 適用前の状態確認

index template を作成せずに、index および index pattern を作成した場合

スクリーンショット 2021-04-13 22.58.07.png

events.geometries.coordinates の Type が "number" になっている。
このままだと、位置情報として扱えない。

index template の作成

kibana 上で下記のように選択していく
Management -> Index Management -> Index Templates -> Create a Template
スクリーンショット 2021-04-13 23.24.16.png

ウィザードが表示されるので、Name と Index patterns を指定 -> Next
Name: 適当に
Index pattern: テンプレートを適用したいインデックスがマッチするように
スクリーンショット 2021-04-13 23.30.58.png

Index settings は何も指定せず -> Next
Mappingsを下記のように設定 -> Next

書き方がわからなかったので、すでにあった index template や、既存の index の mapping 設定を見て書きました
どうやらデータが階層化されていた場合、毎回 "properties" と書いて下の階層を定義するようです

{
  "properties": {
    "events": {
      "properties": {
        "geometries": {
          "properties": {
            "coordinates": {
              "type": "geo_point"
            }
          }
        }
      }
    }
  }
}

Aliases は何も指定せずNext
最後に Create template をクリック

以上で index template が作成されました。

index の再作成

さて、ここで落とし穴の紹介です。
テンプレートを適用したいインデックスがすでに存在していた場合、インデックスの再作成が必要なようです。

まだインデックスを作成していなければ特に気にせずインデックスを作成するだけです。

Index Management -> インデックスを選択 -> Manage -> Delete Index で削除します。

スクリーンショット 2021-04-13 23.55.07.png

私はここでしばらくつまづきました。
「index pattern を再作成すればいいんでしょ」と意気込んで index pattern を作成し直すも、Type が Number のままという状態がつづきました。

もしやと思いインデックスを一度削除し、作成しなおしたところうまくいきました。

index pattern の再作成

index pattern も同様に、すでに存在していた場合は作成し直します。

まずは既存の index pattern を削除
Index Pattern -> 削除する index pattern を選択 -> ゴミ箱ボタン

スクリーンショット 2021-04-14 0.06.35.png

改めて index pattern を作成
Index Pattern -> Create index pattern
Index pattern に nasa* と入力 -> Next step
Time Filter field name に @timestamp を指定 -> Create index pattern

スクリーンショット 2021-04-14 0.15.40.png

スクリーンショット 2021-04-14 0.21.32.png

スクリーンショット 2021-04-14 0.22.25.png

index template適用後の状態確認

上記の手順で index pattern を作成すると、作成された index pattern の各フィールド情報が表示される。
events.geometries.coordinates のデータ型(Type)が geo_point になっていることを確認する。

スクリーンショット 2021-04-14 0.23.15.png

まとめ

j-yamaさん、ありがとうございました。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3