基於夜鶯快速構建日誌告警平臺
在收集到日誌之後,我們通常會有下面幾類基於日誌做告警的需求:
-
統計日誌中的 ERROR 關鍵字出現次數,超過閾值則發出告警;
-
從網關日誌中提取服務接口的 QPS,出現較大波動則發出告警;
-
從網關日誌中提取服務接口的延遲,延遲太高則發出告警;
我們可以基於夜鶯的的整體流程,快速構建一個日誌告警平臺來滿足上述的需求,本文從產品設計,架構設計,代碼實現三個方面,來介紹如何基於夜鶯來構建日誌告警平臺。爲了滿足大家的好奇心,我們來先看一張效果圖,下圖是告警歷史詳情頁的截圖。
告警歷史詳情
產品設計
通過前文的介紹,我們的需求已經比較明確了,將應用的日誌收集起來,在平臺上配置告警規則,根據配置的規則觸發告警通知,收到通知之後,我們在頁面上可以看到和告警數據相關的日誌原文,便於快速定位問題。
夜鶯監控已經支持了告警規則配置頁面和告警詳情查看頁面,所以我們可以直接複用這兩個頁面。當收到告警通知,點擊到告警詳情頁時,夜鶯目前的告警詳情頁只有查看時序數據的能力,沒有查看日誌原文的能力,所以還需要增加在詳情頁查看日誌原文的能力。所以爲了支持日誌告警能力,在產品層面我們需要對夜鶯的兩個頁面(告警規則頁面、告警歷史詳情頁面)進行改造。
告警規則原型設計
告警歷史原型設計
架構設計
產品設計確定之後,我們來進行架構設計,首先看一下夜鶯已有的能力
-
n9e-webapi 提供各種配置管理、即時數據查詢、告警歷史詳情查看的能力
-
n9e-server 提供同步規則、查詢數據、產生異常點、生成告警事件、告警屏蔽、告警訂閱、告警通知的能力。
如果要增加日誌告警能力,我們可以發現在產生異常點之後,n9e-server 後續的一系列能力是可以複用的,所以我們可以得到下面的架構圖
架構圖
從上圖我們可以發現,日誌告警模塊只要實現下面 4 個功能即可:
-
同步告警規則;
-
從日誌中提取 metric 數據和原文;
-
根據規則判斷數據是否異常;
-
異常點發送給 n9e-server;
搞清楚要做什麼事情之後,下面我們要開始動手寫代碼了。
代碼實現
本小節主要是介紹日誌告警模塊代碼實現的思路,我們可以開發一個獨立的模塊,主要是實現下面四個功能。
同步告警規則
我們可以通過定期查詢 n9e-webapi 提供的 api 來同步告警規則,同步邏輯可以參考 n9e-server 模塊 https://github.com/ccfos/nightingale/blob/main/src/server/memsto/alert_rule_cache.go 的邏輯,將從數據庫查詢,改成從 api 獲取即可。
日誌中查詢 metric 數據和原文
Elasticsearch 提供了 bucket aggregations[1] 和 metric aggregations[2] 的 api,通過這兩個 api ,我們可以根據查詢條件查到對應的 metric 數據。通過 es 的 search api,我們可以根據查詢條件查到日誌原文。
根據規則判斷數據是否異常
這個功能可以參考 n9e-server 的告警規則判斷邏輯,代碼在 https://github.com/ccfos/nightingale/blob/main/src/server/engine/worker.go loopFilterRules() 定期獲取規則,然後生成異常點檢測任務,Work() 實現了產生異常點的功能。
異常點發送給 n9e-server
n9e-server 提供了接收異常點然後產生告警事件的接口,產生異常點之後,我們把異常點 push 給 n9e-server 的 api[3] 即可,之後的告警事件處理流程,全部由 n9e-server 來負責。
最終效果
通過夜鶯日誌告警插件,我們可以在夜鶯平臺,實現日誌場景下的監控告警體系建設。
產品截圖
One more thing
快貓星雲技術團隊已經實現了夜鶯日誌告警這個模塊,如果您在使用夜鶯監控,遇到了 Metric 監控覆蓋不到的場景,需要對日誌進行監控告警,可以點擊閱讀原文鏈接購買試用,團隊版首次試用費用只需 29 元, 感興趣的可以用起來:)
關於快貓星雲
快貓星雲,一家雲原生智能運維科技公司,秉承着讓監控分析變簡單的初心和使命,致力於打造先進的雲原生監控分析平臺,結合人工智能技術,提升雲原生時代數字化服務的穩定性保障能力。快貓星雲團隊是開源項目夜鶯監控的主要貢獻者、項目管理委員會核心成員。
關於夜鶯監控
一款開源雲原生監控分析系統,採用 All-In-One 的設計,集數據採集、可視化、監控告警、數據分析於一體,與雲原生生態緊密集成,提供開箱即用的企業級監控分析和告警能力,已有衆多企業選擇將 Prometheus + AlertManager + Grafana 的組合方案升級爲使用夜鶯監控。夜鶯監控,由滴滴開發和開源,並於 2022 年 5 月 11 日,捐贈予中國計算機學會開源發展委員會(CCF ODC),爲 CCF ODC 成立後接受捐贈的第一個開源項目。
-
夜鶯監控項目文檔站點:https://n9e.github.io
-
歡迎大家在 github 上 star 夜鶯項目:https://github.com/ccfos/nightingale
-
加入夜鶯交流社羣請添加微信:flashcats
參考資料
[1]
bucket aggregations: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html
[2]
metric aggregations: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html
[3]
api: https://github.com/ccfos/nightingale/blob/main/src/server/router/router.go#L106
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/qn1IwB20QlR1A1I2reAM6Q