jpOwl一款高性能的後端業務監控,動態配置策略規則的工具包

著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

設計架構

jpOwl客戶端是java語言編寫而成,要求作到API簡單、高可靠性能、不管在任何場景下客戶端都不能影響各業務服務的性能。旨在爲各業務線提供豐富的埋點功能與數據採集。java

在收集數據方面使用ThreadLocal,爲每個使用該變量的線程都提供一個變量值的副本,是Java中一種較爲特殊的線程綁定機制,是每個線程均可以獨立地改變本身的副本,而不會和其它線程的副本衝突。git

如圖,執行業務邏輯的時候,就會把這次請求對應的監控存放於ThreadContext中,ThreadContext實際上是一個監控樹的結構。最後業務線程執行結束時,將監控對象 異步存入一個內存隊列中,jpOwl有個消費線程將隊列內的數據 異步發送到第三方存儲引擎。

場景需求

  • 監控粒度可控制做用在接口上,方法上,乃至代碼塊上
  • 異步方式運行,即便失敗也不影響業務流程
  • 提供註解式與編程式的使用方式
  • 日誌級別可根據響應時間,失敗次數,數據大小決定升降
  • 可添加自定義觸發器,觸發特定功能
  • 監控產生的日誌內容可動態指定記錄前綴名
  • 支持內存,本地文件,mongodb,elastic search等輸出源
  • 支持在線修改調整日誌記錄級別
  • 支持監控數據延遲上報或觸發,便於聚合業務數據統計記錄

支持以秒級,分鐘級監控異常失敗次數,方法接口執行次數。根據指標配置告警策略,如釘釘,郵件,短信等方式。業務可根據須要設置日誌前綴與延遲上報,在內存隊列或觸發器進行業務指標計算公式的預計算,對個性化業務指標進行監控告警或數據記錄至其餘數據源,由echart等圖表工具展現。github

性能設計

序列化和通訊是整個客戶端包括服務端性能裏面很關鍵的一個環節mongodb

  • 異步序列化,jpOwl序列化協議protobuf序列化協議
  • 異步通訊,jpOwl通訊是基於Netty來實現的NIO的數據傳輸
  • 異步化IO傳輸的操做
  • 異步數據採集,基於NIO管道記錄日誌
  • 基於內存級別的數據緩衝,可指定緩存隊列大小
  • 可指定內存隊列安全機制,當隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌

價值與優點

價值數據庫

  • 減小故障發現時間
  • 下降故障定位成本
  • 輔助應用程序優化
  • 監控數據是全量統計,jpOwl支持預計算數據
  • 鏈路數據是採樣計算

優點編程

  • 實時處理:信息的價值會隨時間銳減,因此收集信息須要迅速
  • 全量數據:全量採集指標數據,便於深度分析故障案例
  • 故障容忍:故障不影響業務正常運轉、對業務透明
  • 高吞吐:海量監控數據的收集,須要高吞吐能力作保證

業務模型監控

jpOwl主要支持如下四種監控模型:緩存

  • Transaction 適合記錄跨越系統邊界的程序訪問行爲,好比遠程調用,數據庫調用,也適合執行時間較長的業務邏輯監控,Transaction用來記錄一段代碼的執行時間和次數。
  • Event 用來記錄一件事發生的次數,好比記錄系統異常,它和transaction相比缺乏了時間的統計,開銷比transaction要小。
  • Heartbeat 表示程序內按期產生的統計信息, 如CPU利用率, 內存利用率, 鏈接池狀態, 系統負載等。
  • Metric 用於記錄業務指標、指標可能包含對一個指標記錄次數、記錄平均值、記錄總和,業務指標最低統計粒度爲1分鐘。

消息樹

jpOwl監控系統將每次URL、Service的請求內部執行狀況都封裝爲一個完整的消息樹、消息樹可能包括TransactionEventHeartbeatMetric等信息。 完整的消息樹 安全

可視化消息樹
分佈式消息樹【一臺機器調用另一臺機器】

項目地址:github.com/jiangeeq/jp…架構

相關文章
相關標籤/搜索