基於夜鶯快速構建日誌告警平臺

在收集到日誌之後,我們通常會有下面幾類基於日誌做告警的需求:

我們可以基於夜鶯的的整體流程,快速構建一個日誌告警平臺來滿足上述的需求,本文從產品設計,架構設計,代碼實現三個方面,來介紹如何基於夜鶯來構建日誌告警平臺。爲了滿足大家的好奇心,我們來先看一張效果圖,下圖是告警歷史詳情頁的截圖。

告警歷史詳情

產品設計

通過前文的介紹,我們的需求已經比較明確了,將應用的日誌收集起來,在平臺上配置告警規則,根據配置的規則觸發告警通知,收到通知之後,我們在頁面上可以看到和告警數據相關的日誌原文,便於快速定位問題。

夜鶯監控已經支持了告警規則配置頁面和告警詳情查看頁面,所以我們可以直接複用這兩個頁面。當收到告警通知,點擊到告警詳情頁時,夜鶯目前的告警詳情頁只有查看時序數據的能力,沒有查看日誌原文的能力,所以還需要增加在詳情頁查看日誌原文的能力。所以爲了支持日誌告警能力,在產品層面我們需要對夜鶯的兩個頁面(告警規則頁面、告警歷史詳情頁面)進行改造。

告警規則原型設計

告警歷史原型設計

架構設計

產品設計確定之後,我們來進行架構設計,首先看一下夜鶯已有的能力

如果要增加日誌告警能力,我們可以發現在產生異常點之後,n9e-server 後續的一系列能力是可以複用的,所以我們可以得到下面的架構圖

架構圖

從上圖我們可以發現,日誌告警模塊只要實現下面 4 個功能即可:

  1. 同步告警規則;

  2. 從日誌中提取 metric 數據和原文;

  3. 根據規則判斷數據是否異常;

  4. 異常點發送給 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 成立後接受捐贈的第一個開源項目。

參考資料

[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