KibanaでUnix timestampを使う方法


概要

Kibana(Elasticsearch)なログ基盤にFirehose経由で脳直にUnix timestampを投げ込んだら、見事に Date 型として認識してくれなかったのでメモ。 number になっちゃうんだよなぁ…

Autoindexが良い感じに処理してくれるようにテンプレートを書く感じ。

下準備

すでに存在しているindexは消しておく

テンプレート設定

typeindex が分かれば設定できる。

indexについて

特に気にする必要はなくて、 hoge-* とか hoge-error-* とか hoge-error-log-* とかで良さそう。

typeについて

typeが把握できていない場合は Kinesis の設定画面を見れば良さそう。

Amazon Kinesis -> Data Firehose -> 該当するストリーム名 」で辿り着くページの Amazon Elasticsearch Service destination を見ればわかる。

以上を踏まえた設定値

PUT _template/hoge_template
{
  "template": "hoge-error-log-*",
  "mappings": {
    "log": {
      "properties":{
        "timestamp": {
          "type": "date",
          "format": "epoch_second"
        }
      }
    }
  }
}

データを投げ込む

適当に。例えばこんなデータ。


{
    "host": "ip.ap-northeast-1.compute.internal",
    "message": "test",
    "level": "err",
    "timestamp": 1560762549
}

動作確認(Create index patternをしてみる)

わーい!ちゃんと date として認識しているぞー

補足

浮動小数点なデータ( date +%s.%3N コマンドで取れるようなミリ秒付きの値)でも動作はするが、内部処理系で整数型に丸められているみたい。

なので、解析にミリ秒が必要なときは、ちゃんとミリ秒単位なunix epoch(13桁)を投げ込むようにして、 formatepoch_millis を指定すると良さそう。

利用できる format 情報については下記を参照。

format | Elasticsearch Reference [7.1] | Elastic

ちなみに epoch_millis||basic_ordinal_date_time_no_millis みたいな指定もできるらしい。試してないけど。

参考文献

SORACOM Funnel の timestamp を Elasticsearch で自動mappingする方法 - Qiita
Elasticsearchの自動マッピングの一部を上書きする方法 - Qiita