いろいろと便利なフルマネージドなサービスが登場しているので、今現在巷でどのぐらい使われているのかは知りませんが、仕事でElasticSearchとKibanaを使っています。

その中で、毎回Kibanaでクエリを書くときにKQLがスッと出てこずに困ることがあったので、自分用にKQLのメモをまとめました。

対象を指定して検索する

http.response.status_code : 400とやれば、http.response.status_code400のデータを抽出することができます。(:==的なものだと理解しています)

スペースを含む語句はダブルクオーテーションでくくる

agent.name : "my agent name"のようにします。agent.name : my agent nameだと意図した絞り込みになりません。

OR条件とAND条件

普通にorまたはandのキーワードでクエリをつなぎます。

response : 200 and agent.name : ruby

同一フィールドに対するorandであれば、条件の側をカッコでまとめたうえでorを適用できます

http.response.status_code : (400 or 404)

item_inventory.stock >= 100 and item_inventory.stock <= 500のように使って、sqlのbetween句的に範囲を指定することもできます

NOT条件

notで否定しますnot http.response.status_code : 400

日付条件

日付形式の時はYYYY-MM-DDThh:mm:ssの要領で書きます。

具体的には、@timestamp > '2021-06のようにしてクエリに日付条件を書けます。

存在しているかチェックする

:の代わりに:*を使います。(こっちの方が、体感的にわかるくらい早いケースもあります)

ワイルドカードを使う

*でLIKE検索的な事ができます。

system.os.name : win*

さらに、フィールドの側にも*を指定できます

response-code-2021-* : success

私が良く使うのはこんなところです。
また増えてきたらメモを足そうと思います。