pinpoint不显示mysql_Pinpoint类加载器问题

pinpoint的插件包中有依赖第三方jar的类,这样类加载器加载不会有问题?

pinpoint agent目录结构

25e885dc5567c09b1c9649964d3b064e.png

boot是bootStrapClassLoader加载

lib是pinpoint自定义的类加载器加载,

tools下的jar包pinpoint类加载器加载。

plugin下的jar包,这些只有某个插件被用到了,

才会被应用类加载器加载。如果没用用到这个插件的话,这个插件jar包不会被加载。

pinpoint agent大体流程:

1.启动加载agent目录下的jar,解析相关参数

2.直接进入到PinpointBootStrap类下的premain函数:监听类加载事件

java.lang.instrument.ClassFileTransformer.transform(ClassLoader, String, Class>, ProtectionDomain, byte[])

3.根据启动配置找到匹配的Class对应的插件jar,使用当前的应用ClassLoader加载这个插件。

4.匹配class对应的方法有哪些拦截器。通过asm,javassist对该方法进去织入字节码。(具体的字节码代码字符串又相关拦截器封装组成)(方法前后,异常处)

5.生成新得class字节码对象返回。

6.实现字节码得aop拦截,注入相关业务代码。

注意点:

agent核心会依赖一些第三方公用jar包,比如日志什么得

agent核心不会依赖插件中得第三方jar

agent插件jar中java代码会有第三方jar包得引用代码。但是这个插件jar不会打入第三方jar包代码。只有判断应用层需要这个插件jar才会去加载这个jar。所以这个插件jar包不需要直接包含第三方jar包,只需要代码里面包含就好了。应用程序里面已经包含了这个第三方jar。

agent启动加载

d41f9f372d8a20a39b4ed1d15a118fb6.png

ClassFileTransformerDispatcher

com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformerGuardDelegate.transform(ClassLoader, String, Class>, ProtectionDomain, byte[])

com.navercorp.pinpoint.profiler.instrument.JavassistMethod

com.navercorp.pinpoint.profiler.instrument.interceptor.InvokeBeforeCodeGenerator.generate()

参考:

文章来源: www.oschina.net,作者:xiaomin0322,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/xiaominmin/blog/3142272

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要跟踪 Nginx 请求,您可以使用 Pinpoint 的 Agent 模块和 Nginx 的模块 ngx_http_upstream_module。具体步骤如下: 1. 安装 Pinpoint Agent 您可以去 Pinpoint 官网下载对应语言的 Agent,然后按照官方文档的说明进行安装和配置。如果您使用的是 Java 语言,可以参考官网的 Java Agent 使用指南。 2. 安装 Nginx 如果您还没有安装 Nginx,可以去 Nginx 官网下载对应版本的 Nginx,并按照官方文档的说明进行安装。 3. 配置 Nginx 在 Nginx 的配置文件中增加以下配置: ``` http { upstream backend { server 127.0.0.1:8080; } server { listen 80; location / { proxy_pass http://backend; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Pinpoint-Sampled true; proxy_set_header Pinpoint-Traceid $http_pinpoint_traceid; proxy_set_header Pinpoint-Spanid $http_pinpoint_spanid; proxy_set_header Pinpoint-Pspanid $http_pinpoint_pspanid; } } } ``` 其中,`upstream` 块定义了后端服务的地址和端口,`server` 块定义了监听的端口和请求的转发规则。在请求头中增加了 `Pinpoint-Sampled`、`Pinpoint-Traceid`、`Pinpoint-Spanid`、`Pinpoint-Pspanid` 四个字段,用于在 Pinpoint 中跟踪请求。 4. 启动 Nginx 和 Pinpoint Agent 启动 Nginx 和 Pinpoint Agent,然后在 Pinpoint 的 Web 界面中就可以看到 Nginx 的请求信息了。 需要注意的是,Pinpoint 只能跟踪到通过 Agent 执行的代码的请求信息,如果您的应用程序中有使用到其他模块或第三方库,需要确保这些模块也支持 Pinpoint,否则 Pinpoint 将无法跟踪到这些请求的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值