夜鶯監控(Nightingale)支援日誌告警,可以針對 ElasticSearch、Loki、ClickHouse 中的日誌資料設定告警規則,週期性查詢資料來源,當資料來源中的資料滿足告警閾值時,觸發告警。
夜鶯監控(Nightingale)支援日誌告警,可以針對 ElasticSearch、Loki、ClickHouse 等資料來源中的日誌資料設定告警規則,週期性查詢資料來源,當資料來源中的資料滿足告警閾值時,觸發告警。日誌告警和指標告警的區別主要是查詢條件的寫法不同。其他各個欄位都是通用的,請一定先閱讀指標告警的內容,這裡不再贅述。
ElasticSearch 告警原理
ElasticSearch 支援不同的查詢語法,比如 DSL、KQL、Lucene、EQL、SQL 等,夜鶯作為一個告警引擎,本質就是讓使用者設定查詢語句,然後週期性查詢資料來源,對查到的資料做閾值判斷,滿足閾值條件就觸發告警。
最先支援的查詢語法是 Lucene,即 query_string 方式,查到資料之後做一個基本的統計,比如做一個計數,統計一下查到的日誌行數,或者針對日誌中的某個欄位做統計,計算其平均、最大值、分位值等。然後把統計結果和使用者設定的閾值進行對比,滿足閾值條件就觸發告警。
ElasticSearch 告警設定
首先是設定資料來源,即當前告警規則要生效到哪些 ElasticSearch 資料來源上,這個和指標告警本質是一樣的邏輯。

🟢 資料來源的類型那裡,只有設定了對應類型的資料來源,這裡才會展示。即:如果你只設定了 Prometheus 類型的資料來源,建立告警規則的時候,是看不到 ElasticSearch、TDEngine、ClickHouse 等其他類型的。
然後設定查詢統計條件:

首先要選擇索引,支援萬用字元,我上面設定的是 fc*,然後最關鍵的是過濾條件,我上面設定的是 message.status:>100,過濾 message.status 欄位大於 100 的日誌。這個過濾條件是 Lucene 的語法,和 Kibana 的查詢語法是不一樣的。日誌必然有個日期欄位,需要通過設定告知夜鶯,哪個欄位是日期欄位,然後設定一個時間間隔,上圖設定的是 5 分鐘,夜鶯就根據日期欄位過濾最近 5 分鐘的資料。
然後下面是統計分析方法,上例中選擇的是 count,表示統計日誌行數,並且沒有任何 Group By 條件。
最後是閾值判斷,即把上面 count 的結果,和閾值做比對,如果符合條件就產生告警事件。上例中閾值是 > 0 就告警,即 count 的結果大於 0 就告警。
稍等片刻,我們可以看到產生的告警事件:

ElasticSearch 過濾條件
過濾條件(即上例中的 message.status:>100)還有哪些寫法?可以點擊過濾條件旁邊的那個小問號的圖示,會在側拉板中展示過濾條件的寫法範例說明。一些典型的寫法如下:
status:active查詢 status 欄位包含 active 的記錄title:(quick OR brown)查詢 title 欄位包含 quick 或 brown 的記錄author:"John Smith"查詢 author 欄位包含完整短語「John Smith」的記錄count:[1 TO 5]資料範圍查詢,閉區間,即包含 1 和 5date:[2022-01-01 TO 2022-12-31]日期範圍查詢age:>=10數值大小過濾,大於等於 10
注意,為了避免犯錯,建議欄位後面的冒號 : 前後都不要加空格。另外,不同的條件之間可以使用 AND、OR 連接,比如 status:active AND age:>=10。更多寫法請參考 ElasticSearch 的官方文件。