夜鶯(Nightingale)Elasticsearch
ES 日誌查詢目前支持兩個查詢語法,下面分別介紹
query string 語法
query string 查詢語法支持以下幾種常見的查詢方式:
欄位查詢
可以指定欄位名稱進行查詢:
status:active- 查詢 status 欄位包含 active 的記錄title:(quick OR brown)- 查詢 title 欄位包含 quick 或 brown 的記錄author:"John Smith"- 查詢 author 欄位包含完整短語 “John Smith” 的記錄
萬用字元查詢
支持使用 ? 和 * 萬用字元:
qu?ck- ? 匹配單個字元bro*- * 匹配零個或多個字元
模糊查詢
使用 ~ 運算符進行模糊匹配:
quikc~- 匹配與 quick 相似的詞"fox quick"~5- 短語查詢中的詞之間可以相隔最多5個位置
範圍查詢
支持數值和日期範圍:
count:[1 TO 5]- 閉區間,包含1和5count:{1 TO 5}- 開區間,不包含1和5date:[2022-01-01 TO 2022-12-31]age:>10- 大於10age:>=10- 大於等於10
布林運算符
可以使用 AND、OR、NOT 等布林運算符:
quick AND brown- 同時包含兩個詞quick OR brown- 包含其中任意一個詞quick NOT fox- 包含 quick 但不包含 fox
更多詳細語法可以參考 Elasticsearch 官方文檔
KQL 語法
KQL (Kibana Query Language) 是一種簡單的基於文本的查詢語言。下面介紹幾個常用的查詢示例:
示例1:精確匹配
說明:查詢 method 欄位值為 GET 的日誌
過濾條件:method: GET
示例2:使用萬用字元
說明:查詢所有以 error 開頭的日誌級別
過濾條件:level: error*
示例3:範圍查詢
說明:查詢響應時間在 1 秒到 5 秒之間的請求
過濾條件:response_time >= 1 and response_time <= 5
示例4:組合查詢
說明:查詢 method 為 POST 並且狀態碼為 500 或 502 的錯誤日誌
過濾條件:method: POST and status_code: (500 or 502)
示例5:巢狀欄位查詢
說明:查詢用戶信息中名字為 Alice,姓氏為 White 的日誌
過濾條件:user:{ first: "Alice" and last: "White" }
更多詳細的 KQL 語法可以參考 Kibana 官方文檔