Kibanaで使う謎のクエリ言語KQLのメモ
いろいろと便利なフルマネージドなサービスが登場しているので、今現在巷でどのぐらい使われているのかは知りませんが、仕事でElasticSearchとKibanaを使っています。
その中で、毎回Kibanaでクエリを書くときにKQLがスッと出てこずに困ることがあったので、自分用にKQLのメモをまとめました。
対象を指定して検索する
http.response.status_code : 400
とやれば、http.response.status_code
が400
のデータを抽出することができます。(:
が==
的なものだと理解しています)
スペースを含む語句はダブルクオーテーションでくくる
agent.name : "my agent name"
のようにします。agent.name : my agent name
だと意図した絞り込みになりません。
OR
条件とAND
条件
普通にor
またはand
のキーワードでクエリをつなぎます。
response : 200 and agent.name : ruby
同一フィールドに対するor
やand
であれば、条件の側をカッコでまとめたうえで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
私が良く使うのはこんなところです。
また増えてきたらメモを足そうと思います。