背景
SkyWalking Java Agent 8.10.0 增加了对database连接池和tomcat线程池监控的plugin:skywalking.apache.org/events/rele…
如果我们自己想增加一些针对于自己业务的线程池的监控,Skywalking也是提供了拓展点的。
实现
客户端实现
这篇官方文档描述了客户端(也就是应用端)如何上传数据到SkyWalking服务端。
skywalking.apache.org/docs/skywal…

通过查看官方对tomcat线程池的实现,可以看到主要使用了 MeterFactory.gauge API,我们可以在我们自己的组件中也用类似的写法进行模拟一下。

通过对tomcat线程池的拦截源码来看,其实核心原理就是在合适的地方拦截到Java线程池对象,然后通过调用线程池对象的getXxxSize来获取到相应的状态,然后上报,
因为我这里的需求是监控grpc运行时的业务线程池,所以首先我需要先编写我的客户端插件,用于取到grpc业务线程池,并对其进行状态监控调用,我的源代码如下:
定义拦截类,我这里是在ServerImpl.start,也就是grpc服务启动的时候进行拦截,获取线程池:
public class GrpcThreadPoolInstrumentation extends ClassEnhancePluginDefine {
// 代理类
public static final String INTERCEPT_CLASS =
"org.apache.skywalking.apm.plugin.grpc.v1.server.GrpcDefaultThreadExecutorInterceptor";
// 需要拦截的方法
public static final String ENHANCE_METHOD = "start";
// 需要拦截的类
public static final String ENHANCE_CLASS = "io.grpc.internal.Serv

最低0.47元/天 解锁文章
8221

被折叠的 条评论
为什么被折叠?



