Pepper Metrics 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Pepper Metrics 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议: Apache
开发语言: Java
操作系统: 跨平台
收录时间: 2019-08-28
提 交 者: zrbcool

Architecture

Pepper Metrics项目从核心概念上来说,基于Tom Wilkie的RED理论,即对每个服务 (这里的服务特指进程中的某种调用,比如调用一次数据库查询)进行RED指标收集,并持久化到数据库,并通过dashboard进行展示,辅助进行性能趋势分析。

Concept

Arch

各个组件说明

  • Profiler, 核心部分,用于启动定期调度任务,并通过ExtensionLoad加载所有的ScheduledRun扩展,按照指定周期发起调度。同时内部维护Stats的构造器Profiler.Builder
  • Scheduler, 虚拟概念,在Profiler作为一个定时任务存在
  • ExtensionLoader, 非常重要的组件,通过Java SPI机制加载插件,使项目的各个模块可以灵活插拔,也是项目架构的基石
  • ScheduledRun, 扩展点:pepper metrics core会定时调度,传递所有的Stats,实现插件可以使用Stats当中收集到的性能数据,目前已实现的为scheduled printer组件
  • Pepper Metrics X, 具体的集成,我们的目标是度量一切,目前计划实现的为:jedis,motan,dubbo,servlet,mybatis等最常用组件

Getting started

以Mybatis集成为例,更多其他请参考:User Guide

  • 增加maven依赖
<dependencies>
    <!-- pepper metrics dependencies -->
    <dependency>
        <groupId>top.zrbcool</groupId>
        <artifactId>pepper-metrics-mybatis</artifactId>
        <version>1.0.11</version>
    </dependency>
    <!-- pepper-metrics datasource use prometheus by default -->
    <dependency>
        <groupId>top.zrbcool</groupId>
        <artifactId>pepper-metrics-ds-prometheus</artifactId>
        <version>1.0.11</version>
    </dependency>
</dependencies>
  • 配置Pepper Metrics定制的Mybatis插件使集成生效
<configuration>
    <typeAliases>
        ...
    </typeAliases>
    <!-- 加入如下配置 -->
    <plugins>
        <plugin interceptor="com.pepper.metrics.integration.mybatis.MybatisProfilerPlugin" />
    </plugins>
    <mappers>
        ...
    </mappers>
</configuration>
  • 日志输出效果:
18:27:28 [perf-mybatis:20190822182728] ---------------------------------------------------------------------------------------------------------------------------------------------------------
18:27:28 [perf-mybatis:20190822182728] | Metrics                                                                     Concurrent Count(Err/Sum)   P90(ms)   P99(ms)  P999(ms)   Max(ms)     Qps | 
18:27:28 [perf-mybatis:20190822182728] | com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId                  0         0/1950       0.6       1.4       2.5       3.5    32.5 | 
18:27:28 [perf-mybatis:20190822182728] | sample.mybatis.mapper.CityMapper.selectCityById                                      0         0/1950       0.8       2.4      56.6      56.6    32.5 | 
18:27:28 [perf-mybatis:20190822182728] ---------------------------------------------------------------------------------------------------------------------------------------------------------
  • Prometheus指标输出效果(默认的实现,可以修改为其他数据库)
 ✗ curl localhost:9146/metrics
# HELP app_mapper_summary_seconds_max  
# TYPE app_mapper_summary_seconds_max gauge
app_mapper_summary_seconds_max{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",} 0.051129036
app_mapper_summary_seconds_max{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",} 0.011559611
# HELP app_mapper_summary_seconds  
# TYPE app_mapper_summary_seconds summary
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",quantile="0.9",} 5.5296E-4
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",quantile="0.99",} 0.001765376
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",quantile="0.999",} 0.052424704
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",quantile="0.99999",} 0.052424704
app_mapper_summary_seconds_count{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",} 3040.0
app_mapper_summary_seconds_sum{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",} 1.45711331
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",quantile="0.9",} 4.4032E-4
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",quantile="0.99",} 0.001308672
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",quantile="0.999",} 0.002881536
app_mapper_summary_seconds{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",quantile="0.99999",} 0.012056576
app_mapper_summary_seconds_count{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",} 3040.0
app_mapper_summary_seconds_sum{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",} 0.772147736
# HELP app_mapper_concurrent_gauge  
# TYPE app_mapper_concurrent_gauge gauge
app_mapper_concurrent_gauge{class="com/pepper/metrics/sample/mybatis/mapper/CityMapper.xml",operation="sample.mybatis.mapper.CityMapper.selectCityById",} 0.0
app_mapper_concurrent_gauge{class="com/pepper/metrics/sample/mybatis/mapper/HotelMapper.xml",operation="com.pepper.metrics.sample.mybatis.mapper.HotelMapper.selectByCityId",} 0.0

Maven dependency

以Mybatis为例,更多其他请参考:User Guide

<dependencies>
    <!-- pepper metrics dependencies -->
    <dependency>
        <groupId>top.zrbcool</groupId>
        <artifactId>pepper-metrics-mybatis</artifactId>
        <version>1.0.11</version>
    </dependency>
    <!-- pepper-metrics datasource use prometheus by default -->
    <dependency>
        <groupId>top.zrbcool</groupId>
        <artifactId>pepper-metrics-ds-prometheus</artifactId>
        <version>1.0.11</version>
    </dependency>
</dependencies>

Next steps

Theory

Building

mvn clean package install
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

Pepper Metrics 的相关资讯

还没有任何资讯

Pepper Metrics 的相关博客

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

关于项目 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybat...

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

关于项目 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybat...

Pepper初级教程:第二章 Pepper的使用方法

第二章 Pepper 的使用方法 Pepper的开箱和装箱要特别注意安全。 不按照标准方法开箱和装箱,是导致Pepper出现故障的最常见原因...

Pepper初级教程:第一章 Pepper的硬件介绍

第一章 Pepper的硬件介绍 首先让我们确认Pepper的硬件设备。 请大家在了解Pepper的硬件设备之后再开始App的开发。 1.1 感应器...

Pepper初级教程:第四章 Pepper的App开发技术

第五章 Pepper App开发技术 4.1 Pepper对话 制作对话App的方法有很多,其中一个方法是使用Speech Reco.和Say指令盒来实现。 ...

metrics

java 监控

Metrics类型

Metrics类型 在上一小节中我们带领读者了解了Prometheus的底层数据模型,在Prometheus的存储实现上所有的监控样本都是以time-...

Metrics介绍

Metrics可以为你的代码的运行提供无与伦比的洞察力。作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提...

Metrics介绍

Metrics可以为你的代码的运行提供无与伦比的洞察力。作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提...

metrics-server

1 下载项目 git clone https://github.com/kubernetes-incubator/metrics-server.git 2 修改配置文件 cd /root/metrics-serve...

Pepper Metrics 的相关问答

还没有任何问答,马上提问

评论 (0)

加载中
更多评论
0 评论
10 收藏
分享
返回顶部
顶部