做网站的p什么2003,腾讯云网站备案流程,wordpress取消footer,又拍网站怎么做的接手为微服务系统搞链路监控项目一年多#xff0c;也和skywalking打了一年多的交道#xff0c;也应该有个总结#xff0c;主要谈一下搭建监控系统遇到的难点和解决方案。 说明#xff1a; 本文的代码均由本地演示代码替代#xff0c;非实际代码
为啥选skywalking#xf…接手为微服务系统搞链路监控项目一年多也和skywalking打了一年多的交道也应该有个总结主要谈一下搭建监控系统遇到的难点和解决方案。 说明 本文的代码均由本地演示代码替代非实际代码
为啥选skywalking因为由于微服务分成多个团队在开发有平台有应用日志分析已经力不从心下决心引入分布式监控skywalking对我们来说有两个基本好处1 代码入侵非常低最后仅仅在多线程跟踪加了几处装饰器监控基本可以独立安排版本或者变更这对管理友好 2 Agent插件模式对应用性能影响不大预估不太会出幺蛾子…
开发过程中我们遇到一些问题本篇先聚焦第一个问题 Agent插件二次开发分两类 1 修改例如对dubbo-plugin把DubboInstrumentation.java中
public class DubboInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {// add loggerprivate static final ILog LOGGER LogManager.getLogger(DubboInstrumentation.class);private static final String ENHANCE_CLASS com.alibaba.dubbo.monitor.support.MonitorFilter; //需修改private static final String INTERCEPT_CLASS org.apache.skywalking.apm.plugin.dubbo.DubboInterceptor;Overrideprotected ClassMatch enhanceClass() {return NameMatch.byName(ENHANCE_CLASS);}Overridepublic ConstructorInterceptPoint[] getConstructorsInterceptPoints() {return null;}Overridepublic InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {return new InstanceMethodsInterceptPoint[] {new InstanceMethodsInterceptPoint() {Overridepublic ElementMatcherMethodDescription getMethodsMatcher() {//LOGGER.info(Dubbo Class is {}, ENHANCE_CLASS);return named(invoke);}Overridepublic String getMethodsInterceptor() {return INTERCEPT_CLASS;}Overridepublic boolean isOverrideArgs() {return false;}}};}
}新增一个DubboProviderInstrumentation根据本地应用改成 ENHANCE_CLASS “com.comstar.cnp.common.infrastructure.DubboProviderFilter”; 以及 DubboComsumerInstrumentation根据本地应用改成 ENHANCE_CLASS “com.comstar.cnp.common.infrastructure.DubboConSumerFilter”;
并修改skyworking-plugin.def文件 dubboorg.apache.skywalking.apm.plugin.dubbo.DubboInstrumentation dubboorg.apache.skywalking.apm.plugin.dubbo.DubboProviderInstrumentation dubboorg.apache.skywalking.apm.plugin.dubbo.DubboComsumerInstrumentation
保证dubbo跟踪链正常
2 另外如基于netty的非标应用就需要开发自定义Agent 按SkyWalking Agent的开发规范需要开发Instrumentation定义拦截点的位置类和方法并开发拦截器Interceptor在beforeMethod创建 Span 并把需要的参数塞到上下文Tag标签中
ublic class seckillwithPoolAndMQInterceptor implements InstanceMethodsAroundInterceptor {Overridepublic void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class?[] classes, MethodInterceptResult methodInterceptResult) throws Throwable {String methodName method.getName();System.out.println(before...methodName);String operationName seckillwithPoolAndMQ;ContextCarrier contextCarrier new ContextCarrier();CarrierItem carrierItem contextCarrier.items();Object pid allArguments[0];Object uid allArguments[1];//carrierItem.setHeadValue(ctxName.name());//创建一个EntrySpan//AbstractSpan span ContextManager.createEntrySpan(operationName, contextCarrier);AbstractSpan span ContextManager.createLocalSpan(operationName);span.setComponent(ComponentsDefine.TOMCAT);span.tag(new StringTag(10, method), methodName);span.tag(new StringTag(20, pid), pid.toString());span.tag(new StringTag(30, uid), uid.toString());span.setLayer(SpanLayer.CACHE);//缓存上下文objInst.setSkyWalkingDynamicField(ContextManager.capture());}最后修改skyworking-plugin.def文件保证插件正常运行 testdemo2-0.1org.apache.skywalking.apm.plugin.demo2.define1.Demo2Instrumentation
解决插件的问题后我们进一步发现Skywalking原生提供100多种插件监控数据项多达数万项但是这些数据并不是全部都需要重点关注冗余的监控数据一方面会影响正常监控另一方面我们也发现过多的监控数据甚至会影响 OAP的性能最夸张的问题可能是云服务和大量监控导致 SW sgementId产生重复者迫使我们要采取适当的措施后续我们将聚焦对SkyWalking 监控数据分类筛选和展示