Kibana で特定の期間のデータを検索したいとき、まず思い浮かぶのは Kibana に標準で付いている Time Picker です。本当に便利なツールです。ただ、データによっては日付フィールドが複数あり、Time Picker ではなく Query で絞り込まなければならない場合があります。たとえばメールのデータでは、送信・開封・クリックのたびに私のサーバーへログが送られてきます。そのため時刻が 2 種類あることになります。メールが送られた時刻と、開封やクリックといったイベントが発生した時刻です。こうした場合は、検索バーで日付フィールドを使って検索する必要が出てきます。

Time Picker

まずは改めて Time Picker を紹介しましょう。ほとんどの場合、時間の制限は Time Picker で解決できます。Time Picker は Kibana の右上に表示されます。

Time Picker にはさまざまな時間の選択肢があります。特に注意したいのは「Today」です。これは今日のデータという意味です。今が午後 3 時なら、00:00 から 15:00 までのデータしか表示されません。「Last 24 hours」は、今から過去 24 時間をさかのぼる意味です。この 2 つは一見似ていますが、実は違います。

また、Timeline ではマウスで直接時間を選択することもできます。例を見てください。

え、Time Picker や Timeline が見えない? 心配はいりません。それは Index を作成したときに、Kibana へ日付フィールドを指定していなかっただけです。Index を作成するときは、下の図のフィールドに注意してください。見落とさないように!

Query with Date Field

Time Picker では解決できず、どうしても Query で処理しなければならない場合は、たとえば subject: "Hi" のような書き方と同じように、次のように書きます。
msg.ts:[2017-01-01T00:00:00.000Z TO 2017-01-03T00:00:00.000Z]
これは msg.ts フィールドが 2017/1/1 から 2017/1/3 までのすべてのデータを探す指定です。そのまま Query の欄に入力すれば OK です。

ほかにも Kibana Filter を使う方法があります。Filter では Elasticsearch DSL の構文を使えます。ただ、Kibana Filter は少し分かりにくい場所にあるため、やや複雑です。以下の説明を参考にしてください。

すると、検索バーに下の図のようなものが表示されます。「編集」をクリックして、構文を貼り付けてください。

{
  "query": {
    "range": {
      "msg.ts": {
        "gte": 1483200000000,
        "lte": 1483372800000
      }
    }
  }
}

Timestamp はミリ秒単位です。