Pepper Metrics - Spring/Spring Boot 应用性能监控利器

本贴最后更新于 1888 天前,其中的信息可能已经水流花落

关于项目

Pepper Metrics 是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集 jedis/mybatis/httpservlet/dubbo/motan 的运行性能统计,并暴露成 prometheus 等主流时序数据库兼容数据,通过 grafana 展示趋势。其插件化的架构也非常方便使用者扩展并集成其他开源组件。
请大家给个 star,同时欢迎大家成为开发者提交 PR 一起完善项目。

Architecture

Pepper Metrics 项目从核心上来说,基于 Tom Wilkie 的 RED 理论,即对每个服务
(这里的服务特指进程中的某种调用,比如调用一次数据库查询)进行 RED 指标收集,包括:

  • 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

16d015419fb86d8b.png

Architecture

16d015419f0b0ace.png

各个组件说明

  • 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 等最常用组件

写在最后

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • metrics
    2 引用
  • 监控
    26 引用 • 33 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
Lord-X
分享原创技术文章,主要关注Java领域及性能优化领域 北京