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
私が良く使うのはこんなところです。
また増えてきたらメモを足そうと思います。