Help us understand the problem. What is going on with this article?

Elasticsearchでdate型のフォーマットをカスタムして同じデータをBigQueryにもインポートする

More than 3 years have passed since last update.

ElasticsearchとBigQueryに同じデータを入れたいという要件があったが、今々Elasticsearchの標準の日付型("format": "dateOptionalTime")は、BigQueryのdate型では対応していないので、Elasticsearch側のdate型のフォーマットを変更した時のメモ。

どう変えるか

BigQueryではdate型のカスタムは出来ないので、BigQueryでサポートされるdate型のフォーマットに合わせた形にしてあげる。

status format 実際のデータ
before "format": "dateOptionalTime" 2016-03-13T13:16:49+0900
after "format": "yyyy-MM-dd HH:flag_mm:ss ZZ" 2016-03-13 13:16:49 +09:00

※UTCではかれるログを扱っていて、JSTで色々処理したい為に、上の実際のデータという値をfluentdで生成しているというちょっと特殊な前提があります。。

考慮した点

Q.インデックスのdate型のformatを変えた際に、Kibanaでは異なるフォーマットのdateでも認識してくれるか?

→実際に、ローカルで検証してみたが、上記の変更後も連続したデータとしてKibana上で認識されたのでOK。Kibanaが賢いのか、Elasticsearchのdate型がUNIXタイムで内部でデータ保持してるからOKだったのかという詳細までは確認していない。。が実運用上はOKとする(@timestampを使ってる前提の話)

実際の手順

今回の作業内容は、新規に新フォーマットの日付型フィールド追加と@timestampのフォーマット変更を実施
fluent-plugin-elasticsearchのtime_keyで新規フィールドをtime_keyに指定しているので、2フィールドに対して作業する

大きく2つの作業。
既存のスキーマ変更と翌日以降に自動で作られるインデックス用のテンプレート更新がある。

①既存のインデックスのスキーマ変更

既に出来ているインデックスについても

fluentdの停止(新規に投入されるデータを一時的に止める)

実行(chromeのSensuプラグイン使うと非常に見やすく便利!!)

curl -XPUT [ElasticsearchのIP]:port/[index名]/_mapping/[type名] -d '
{
    "[type名]": {
        "@timestamp": {
                  "type": "date",
                  "doc_values": true,
                  "format": "yyyy-MM-dd HH:mm:ss ZZ"
        },
        "datetime": {
                  "type": "date",
                  "doc_values": true,
                  "format": "yyyy-MM-dd HH:mm:ss ZZ"
        },   
    }
}
'

確認方法

curl -XGET [ElasticsearchのIP]:port/[index名]/_mapping?pretty

変更したものが反映されている事を確認する


fluentd再開

新規のデータが意図したdate型で入ってきている事を確認

  • kibanaからのデータが欠けなしで見れる事確認
  • 個別で日付型違うデータを引いてみて問題ないかチェック

②テンプレートの更新

お決まりの、jsonファイルを↑と同じ内容で変更して、orderを1つ繰り上げて

$ curl -XPOST localhost:9200/_template/[テンプレート名] -d "`cat [テンプレートファイル名].json`"

curl -XGET [ElasticsearchのIP]:port/_tempalte/[テンプレート名]?pretty

変更したものが反映されている事を確認する

ちなみに、全て1.5系での作業なので、2系の人は少し違うのかも。。そろそろ2系も触らないとな−。。

何かのお役に立てば!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away