Pepper Metrics運(yùn)行時(shí)性能收集工具
Architecture
Pepper Metrics項(xiàng)目從核心概念上來(lái)說(shuō),基于Tom Wilkie的RED理論,即對(duì)每個(gè)服務(wù) (這里的服務(wù)特指進(jìn)程中的某種調(diào)用,比如調(diào)用一次數(shù)據(jù)庫(kù)查詢)進(jìn)行RED指標(biāo)收集,并持久化到數(shù)據(jù)庫(kù),并通過(guò)dashboard進(jìn)行展示,輔助進(jìn)行性能趨勢(shì)分析。
Concept
Arch
各個(gè)組件說(shuō)明
- Profiler, 核心部分,用于啟動(dòng)定期調(diào)度任務(wù),并通過(guò)ExtensionLoad加載所有的ScheduledRun擴(kuò)展,按照指定周期發(fā)起調(diào)度。同時(shí)內(nèi)部維護(hù)Stats的構(gòu)造器Profiler.Builder
- Scheduler, 虛擬概念,在Profiler作為一個(gè)定時(shí)任務(wù)存在
- ExtensionLoader, 非常重要的組件,通過(guò)Java SPI機(jī)制加載插件,使項(xiàng)目的各個(gè)模塊可以靈活插拔,也是項(xiàng)目架構(gòu)的基石
- ScheduledRun, 擴(kuò)展點(diǎn):pepper metrics core會(huì)定時(shí)調(diào)度,傳遞所有的Stats,實(shí)現(xiàn)插件可以使用Stats當(dāng)中收集到的性能數(shù)據(jù),目前已實(shí)現(xiàn)的為scheduled printer組件
- Pepper Metrics X, 具體的集成,我們的目標(biāo)是度量一切,目前計(jì)劃實(shí)現(xiàn)的為:jedis,motan,dubbo,servlet,mybatis等最常用組件
Getting started
以Mybatis集成為例,更多其他請(qǐng)參考: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指標(biāo)輸出效果(默認(rèn)的實(shí)現(xiàn),可以修改為其他數(shù)據(jù)庫(kù))
? 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為例,更多其他請(qǐng)參考: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
- Pepper Metrics User Guide
- Pepper Metrics Architecture
- Pepper Metrics ROAD-MAP
- Pepper Metrics Development Guide
- Pepper Metrics Development Plan
Theory
Building
mvn clean package install
評(píng)論
圖片
表情
