Pinpoint插件开发
一、技术概述
1. 架构组成
pinpoint 主要由 3 个组件外加 Hbase 数据库构成,三个组件分别为:pinpoint-Agent、pinpoint-Collector 和 pinpoint-Web。
2. 系统特色
- 分布式追踪,追踪分布式系统中穿梭的消息
- 自动侦测应用程序拓扑,以帮助指明应用程序的配置
- 横向扩展以支持大规模的服务器组
- 提供代码级别的可见性,以方便识别故障点和瓶颈
- 使用字节码注入技术,无需修改代码就可以添加新功能
3. 运行 pinpoint系统
开源APM工具pinpoint线上部署 ,当然文章是生环部署,本地缩减系就可以。
二、 开发插件
1.目标
pinpoint
插件只拦截指定应用,该插实现拦任意class中所有方法(动态配置)。
2. 创建maven项目
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
3. 插件工作原理
插件原理:在启动的时候扫描webapp目录所有的class然后正则匹配,然后获取class所有方法注册到agent中。
4. 定义spi实现类
pinpiont使用标准spi,需要在META-INF 添加如下文件
1 | META-INF/services/com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin |
5. 实现ProfilerPlugin
核心代码:
1 | //com.navercorp.pinpoint.plugin.apps.AppsPlugin |
文件META-INF/services/com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin
添上class全名com.navercorp.pinpoint.plugin.apps.AppsPlugin
扫描文件目录核心代码:
1 | //com.navercorp.pinpoint.plugin.apps.AppsPlugin |
6. 添加元数据类AppsTypeProvider
核心代码
1 | //com.navercorp.pinpoint.plugin.apps.AppsTypeProvider |
添加文件META-INF/services/com.navercorp.pinpoint.common.trace.TraceMetadataProvider
内容为com.navercorp.pinpoint.plugin.apps.AppsTypeProvider
7. 编写拦截功能
核心代码
1 | //com.navercorp.pinpoint.plugin.apps.interceptor.AppsInterceptor |
8. 编写配置类常量
核心代码
1 | //com.navercorp.pinpoint.plugin.apps.AppConstants |
9. 搜索类SearchClass
1 | //com.navercorp.pinpoint.plugin.apps.search.SearchClass |
10. 打包生成插件
1 | mvn clean -Dmaven.test.skip package |
然后生成的pinpoint-plugin-apps-0.0.1-SNAPSHOT.jar
分别放到Agent
的plugin
中,然后在pinpoint.config
中添加如下配置信息:
1 | ########################################################### |
分别将pinpoint-plugin-apps-0.0.1-SNAPSHOT.jar
放到pinpoint Collector
和pinpoint Web
的lib目录下。
11. 测试
重启web
,Collector
,Agent
,创建需要测试的类,com.iqarr.test
下的类都添加监控中去,然后去pinpoint上看一下插件结果。