Pepper Metrics - Spring/Spring Boot應用性能監控利器

關於項目

Pepper Metrics是我與同事開發的一個開源工具(github.com/zrbcool/pep…),其經過收集jedis/mybatis/httpservlet/dubbo/motan的運行性能統計,並暴露成prometheus等主流時序數據庫兼容數據,經過grafana展現趨勢。其插件化的架構也很是方便使用者擴展並集成其餘開源組件。
請你們給個star,同時歡迎你們成爲開發者提交PR一塊兒完善項目。git

Architecture

Pepper Metrics項目從核心上來講,基於Tom Wilkie的RED理論,即對每一個服務 (這裏的服務特指進程中的某種調用,好比調用一次數據庫查詢)進行RED指標收集,包括:github

  • Rate (請求速率通常指QPS)
  • Errors (錯誤數或單位時間窗口內的錯誤率)
  • Duration (請求消耗的時間通常以PXX的百分位時間表示,好比P99=100ms表明百分之九十九的請求耗時在X毫秒內)

上面簡述了Pepper Metrics項目的核心思想及方法論依據,而從技術上來講,Pepper Metrics項目構建了一套完整的可插拔插件體系,使應用能夠基於選用的組件(如RPC通訊框架dubbo,motan、ORM對象模型關係映射框架mybatis、標準的HTTP Servlet組件、Redis操做庫jedis、等)選擇現有的插件擴展直接具有上述指標的:數據庫

  • 收集
  • 打印(基於標準格式設計並基於slf4j定時輸出於日誌)
  • 輸出(針對多種數據庫,默認以prometheus實現,將指標輸出到prometheus中)
  • 可視化(基於grafana開發的dashboard,默認以prometheus做爲數據源)

Concept

Architecture

各個組件說明mybatis

  • Profiler, 核心部分,用於啓動按期調度任務,並經過ExtensionLoad加載全部的ScheduledRun擴展,按照指定週期發起調度。同時內部維護Stats的構造器Profiler.Builder
  • Scheduler, 虛擬概念,在Profiler做爲一個定時任務存在
  • ExtensionLoader, 很是重要的組件,經過Java SPI機制加載插件,使項目的各個模塊能夠靈活插拔,也是項目架構的基石
  • ScheduledRun, 擴展點:pepper metrics core會定時調度,傳遞全部的Stats,實現插件可使用Stats當中收集到的性能數據,目前已實現的爲scheduled printer組件
  • MeterRegistryFactory,擴展點:基於不一樣的micrometer的Registry實現抽象並屏蔽各個數據庫的差別
  • Pepper Metrics X, 具體的集成,咱們的目標是度量一切,目前計劃實現的爲:jedis,motan,dubbo,servlet,mybatis等最經常使用組件

寫在最後

相關文章
相關標籤/搜索