diff --git a/.gitignore b/.gitignore index 32858aad3..f94a9ea9f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ # Mobile Tools for Java (J2ME) .mtj.tmp/ -# Package Files # +# Package Files *.jar *.war *.ear diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..c7e362198 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,13 @@ +language: java +install: + - cd ci-dependencies + - mvn install:install-file -Dfile=jmxtools-1.2.1.jar -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar + - mvn install:install-file -Dfile=jmxri-1.2.1.jar -DgroupId=com.sun.jmx -DartifactId=jmxri -Dversion=1.2.1 -Dpackaging=jar + - mvn install:install-file -Dfile=dubbox-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbox -Dversion=2.8.4 -Dpackaging=jar + - cd .. + +script: + - mvn clean install -Dmaven.test.skip=true + +after_success: + - mvn clean cobertura:cobertura coveralls:report \ No newline at end of file diff --git a/README.md b/README.md index 5ad844892..7648bd13c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ -# Sky Walking +Sky Walking +========== + SkyWalking: Large-Scale Distributed Systems Tracing Infrastructure, 是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。 + +[![Build Status](https://travis-ci.org/wu-sheng/sky-walking.svg?branch=master)](https://travis-ci.org/wu-sheng/sky-walking) + * 核心理论为[Google Dapper论文:Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html),英语有困难的同学可参考[国内翻译](http://duanple.blog.163.com/blog/static/70971767201329113141336/) * 本分析系统能通过不修改或少量修改代码的模式,对现有的JAVA应用或J2EE应用进行监控和数据收集,并针对应用进场进行准实时告警。此外提供大量的调用性能分析功能,解决目前的监控系统主要监控进程、端口而非应用实际性能的问题。 * 支持国内常用的dubbo以及dubbox等常见RPC框架,支持应用异常的邮件告警 @@ -12,8 +17,9 @@ SkyWalking: Large-Scale Distributed Systems Tracing Infrastructure, 是一个对 |spring-plugin| spring配置文件 | - | - | - | |jdbc-plugin| jdbc配置文件 | - | - | - | |mysql-plugin| - | YES | - | - | -|httpClient-4.x-plugin| - | YES | - | - +|httpClient-4.x-plugin| - | YES | - | - | |httpClient-4.x-plugin-dubbox-rest-attachment| - | YES | - | 需引用httpClient-4.x-plugin | +|jedis-2.x-plugin| - | YES | - | - | |httpclient-4.2.x-plugin| - | - | YES | 需要使用新提供的httpClient包装对象 | |httpclient-4.3.x-plugin| - | - | YES | 需要使用新提供的httpClient包装对象 | diff --git a/ci-dependencies/dubbox-2.8.4.jar b/ci-dependencies/dubbox-2.8.4.jar new file mode 100644 index 000000000..5a207056e Binary files /dev/null and b/ci-dependencies/dubbox-2.8.4.jar differ diff --git a/ci-dependencies/jmxri-1.2.1.jar b/ci-dependencies/jmxri-1.2.1.jar new file mode 100644 index 000000000..71428a6e1 Binary files /dev/null and b/ci-dependencies/jmxri-1.2.1.jar differ diff --git a/ci-dependencies/jmxtools-1.2.1.jar b/ci-dependencies/jmxtools-1.2.1.jar new file mode 100644 index 000000000..2e93c3b9d Binary files /dev/null and b/ci-dependencies/jmxtools-1.2.1.jar differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..1dbb3628e --- /dev/null +++ b/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + com.ai.cloud + skywalking + 1.0-SNAPSHOT + + samples/skywalking-auth + skywalking-protocol + skywalking-api + skywalking-sdk-plugin + skywalking-server + skywalking-alarm + skywalking-analysis + skywalking-webui + + pom + + skywalking + http://maven.apache.org + + + UTF-8 + + + + + junit + junit + 4.12 + test + + + + + + + maven-compiler-plugin + + 1.7 + 1.7 + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-resources-plugin + 2.4.3 + + ${project.build.sourceEncoding} + + + + + org.eluder.coveralls + coveralls-maven-plugin + 4.1.0 + + + org.codehaus.mojo + cobertura-maven-plugin + 2.7 + + xml + 256m + + true + + + + + \ No newline at end of file diff --git a/skywalking-alarm/pom.xml b/skywalking-alarm/pom.xml index 41c3063bc..1604c75ae 100644 --- a/skywalking-alarm/pom.xml +++ b/skywalking-alarm/pom.xml @@ -1,180 +1,205 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.ai.cloud - skywalking-alarm - 1.0-SNAPSHOT - jar + com.ai.cloud + skywalking-alarm + 1.0-SNAPSHOT + jar - skywalking-alarm - http://maven.apache.org + skywalking-alarm + http://maven.apache.org - - UTF-8 - + + UTF-8 + - - - junit - junit - 4.12 - test - - - org.apache.logging.log4j - log4j-core - 2.4.1 - - - redis.clients - jedis - 2.8.0 - - - com.sun.mail - javax.mail - 1.5.4 - - - org.freemarker - freemarker - 2.3.23 - - - org.apache.curator - curator-framework - 2.8.0 - - - org.apache.zookeeper - zookeeper - 3.4.0 - - - org.apache.curator - curator-recipes - 2.8.0 - - - com.google.code.gson - gson - 2.2.2 - - - mysql - mysql-connector-java - 5.1.37 - - - com.zaxxer - HikariCP - 2.4.3 - - - - - - org.apache.maven.plugins - maven-resources-plugin - 2.6 - - - copy-resources - package - - copy-resources - - - ${project.build.directory}/installer/config - - - src/main/resources - false - - - - - - copy-start-script - package - - copy-resources - - - ${project.build.directory}/installer/bin - - - bin - false - - - - - - - - maven-dependency-plugin - - - copy-dependencies - package - - copy-dependencies - - - - - ${project.build.directory}/installer/lib - false - true - - - - maven-jar-plugin - - - *.properties - *.xml - - sky-alarm-server - ${project.build.directory}/installer/lib - - - - maven-antrun-plugin - - - clean - package - - run - - - - - - - - - - - - maven-compiler-plugin - - 1.7 - 1.7 - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - ${project.build.sourceEncoding} - - - - + + + junit + junit + 4.12 + test + + + org.apache.logging.log4j + log4j-core + 2.4.1 + + + redis.clients + jedis + 2.8.0 + + + com.sun.mail + javax.mail + 1.5.4 + + + org.freemarker + freemarker + 2.3.23 + + + org.apache.curator + curator-framework + 2.8.0 + + + org.apache.zookeeper + zookeeper + 3.4.0 + + + org.apache.curator + curator-recipes + 2.8.0 + + + com.google.code.gson + gson + 2.2.2 + + + mysql + mysql-connector-java + 5.1.37 + + + com.zaxxer + HikariCP + 2.4.3 + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.6 + + + copy-resources + package + + copy-resources + + + ${project.build.directory}/installer/config + + + src/main/resources + false + + + + + + copy-start-script + package + + copy-resources + + + ${project.build.directory}/installer/bin + + + bin + false + + + + + + + + maven-dependency-plugin + + + copy-dependencies + package + + copy-dependencies + + + + + ${project.build.directory}/installer/lib + false + true + + + + maven-jar-plugin + + + *.properties + *.xml + + sky-alarm-server + ${project.build.directory}/installer/lib + + + + maven-antrun-plugin + + + clean + package + + run + + + + + + + + + + + + maven-compiler-plugin + + 1.7 + 1.7 + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-resources-plugin + 2.4.3 + + ${project.build.sourceEncoding} + + + + + + + + mvnrepository + mvnrepository + http://mvnrepository.com + + true + + + true + + + + jbossrepository + jboss repository + http://repository.jboss.com + + true + + + true + + + diff --git a/skywalking-api/pom.xml b/skywalking-api/pom.xml index 9521f94c2..931809f92 100644 --- a/skywalking-api/pom.xml +++ b/skywalking-api/pom.xml @@ -2,6 +2,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + com.ai.cloud + skywalking + 1.0-SNAPSHOT + + com.ai.cloud skywalking-api 1.0-SNAPSHOT diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorException.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorException.java new file mode 100644 index 000000000..7be0f8e02 --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/InterceptorException.java @@ -0,0 +1,13 @@ +package com.ai.cloud.skywalking.plugin.interceptor; + +public class InterceptorException extends RuntimeException { + private static final long serialVersionUID = 7846035239994885019L; + + public InterceptorException(String message) { + super(message); + } + + public InterceptorException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/assist/FirstInvokeInterceptor.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/assist/FirstInvokeInterceptor.java new file mode 100644 index 000000000..c6dff6d27 --- /dev/null +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/assist/FirstInvokeInterceptor.java @@ -0,0 +1,42 @@ +package com.ai.cloud.skywalking.plugin.interceptor.assist; + +import java.util.concurrent.atomic.AtomicInteger; + +import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; +import com.ai.cloud.skywalking.plugin.interceptor.InterceptorException; + +/** + * 用于首次拦截方法调用,避免方法内部的方法调用被多次拦截。 + * + * @author wusheng + * + */ +public abstract class FirstInvokeInterceptor implements IAroundInterceptor { + protected String invokeCounterKey = "__$invokeCounterKey"; + + protected Object invokeCounterInstLock = new Object(); + + public boolean isFirstBeforeMethod(EnhancedClassInstanceContext context) { + if (!context.isContain(invokeCounterKey)) { + synchronized (invokeCounterInstLock) { + if (!context.isContain(invokeCounterKey)) { + context.set(invokeCounterKey, new AtomicInteger(0)); + } + } + } + AtomicInteger counter = context.get(invokeCounterKey, + AtomicInteger.class); + return counter.incrementAndGet() == 1; + } + + public boolean isLastAfterMethod(EnhancedClassInstanceContext context) { + if (!context.isContain(invokeCounterKey)) { + throw new InterceptorException( + "key=invokeCounterKey not found is context. unexpected failue."); + } + AtomicInteger counter = context.get(invokeCounterKey, + AtomicInteger.class); + return counter.decrementAndGet() == 0; + } +} diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java index bfd9fc661..873ed1c2d 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/util/BuriedPointMachineUtil.java @@ -35,9 +35,10 @@ public final class BuriedPointMachineUtil { if (StringUtil.isEmpty(IP)) { InetAddress netAddress = getInetAddress(); if (null == netAddress) { - return null; + IP = "N/A"; + }else{ + IP = netAddress.getHostAddress(); //get the ip address } - IP = netAddress.getHostAddress(); //get the ip address } return IP; } @@ -46,9 +47,10 @@ public final class BuriedPointMachineUtil { if (StringUtil.isEmpty(hostName)) { InetAddress netAddress = getInetAddress(); if (null == netAddress) { - return null; + hostName = "N/A"; + }else{ + hostName = netAddress.getHostName(); //get the host address } - hostName = netAddress.getHostName(); //get the host address } return hostName; } diff --git a/skywalking-api/src/test/java/test/ai/cloud/api/TimeTest.java b/skywalking-api/src/test/java/test/ai/cloud/api/TimeTest.java new file mode 100644 index 000000000..708386857 --- /dev/null +++ b/skywalking-api/src/test/java/test/ai/cloud/api/TimeTest.java @@ -0,0 +1,25 @@ +package test.ai.cloud.api; + +import org.junit.Test; + +import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender; +import com.ai.cloud.skywalking.model.Identification; +import com.ai.cloud.skywalking.model.Identification.IdentificationBuilder; + +public class TimeTest { + @Test + public void test(){ + RPCBuriedPointSender sender = new RPCBuriedPointSender(); + long start = System.currentTimeMillis(); + for (int i = 0; i < 100; i++) { + IdentificationBuilder builder = Identification + .newBuilder() + .viewPoint("1111"); + sender.beforeSend(builder.build()); + sender.afterSend(); + } + long end = System.currentTimeMillis(); + System.out.println(end - start + "ms"); + } + +} diff --git a/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java b/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java index 9455dbae0..ed30c53be 100644 --- a/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java +++ b/skywalking-api/src/test/java/test/ai/cloud/plugin/PluginMainTest.java @@ -2,12 +2,9 @@ package test.ai.cloud.plugin; import java.lang.reflect.InvocationTargetException; -import org.junit.Test; - import com.ai.cloud.skywalking.plugin.TracingBootstrap; public class PluginMainTest { - @Test public void testMain() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException { diff --git a/skywalking-sdk-plugin/dubbo-plugin/pom.xml b/skywalking-sdk-plugin/dubbo-plugin/pom.xml index 752835599..33119d72d 100644 --- a/skywalking-sdk-plugin/dubbo-plugin/pom.xml +++ b/skywalking-sdk-plugin/dubbo-plugin/pom.xml @@ -23,12 +23,6 @@ skywalking-api ${project.version} - - com.ai.cloud - skywalking-auth - ${project.version} - test - com.ai.cloud skywalking-api @@ -94,18 +88,20 @@ 0.7 test + - - - - - + --> + + com.alibaba + dubbox + 2.8.4 + compile + org.apache.httpcomponents httpclient diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml b/skywalking-sdk-plugin/dubbo-plugin/src/test/resources/log4j2.xml similarity index 100% rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml rename to skywalking-sdk-plugin/dubbo-plugin/src/test/resources/log4j2.xml diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth b/skywalking-sdk-plugin/dubbo-plugin/src/test/resources/sky-walking.auth similarity index 100% rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth rename to skywalking-sdk-plugin/dubbo-plugin/src/test/resources/sky-walking.auth diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml similarity index 100% rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/pom.xml diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java similarity index 100% rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/java/org/skywalking/httpClient/v4/plugin/dubbox/rest/attachment/DubboxRestHeadSetterAttachment.java diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def similarity index 100% rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/main/resources/skywalking-plugin.def diff --git a/skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java similarity index 100% rename from skywalking-sdk-plugin/skywalking-httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/java/test/skywalking/httpClient/v4x/plugin/dubbox/rest/attachment/TestHttpClientV43.java diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/log4j2.xml b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml similarity index 100% rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/log4j2.xml rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/log4j2.xml diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/sky-walking.auth b/skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth similarity index 100% rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/resources/sky-walking.auth rename to skywalking-sdk-plugin/httpClient-4.x-plugin-dubbox-rest-attachment/src/test/resources/sky-walking.auth diff --git a/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml b/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml index 28bbbc348..6261a330d 100644 --- a/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml +++ b/skywalking-sdk-plugin/httpClient-4.x-plugin/pom.xml @@ -31,14 +31,14 @@ org.apache.httpcomponents httpclient 4.3 - test + compile diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/pom.xml b/skywalking-sdk-plugin/jedis-2.x-plugin/pom.xml similarity index 98% rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/pom.xml rename to skywalking-sdk-plugin/jedis-2.x-plugin/pom.xml index 8fa4dc6aa..1df3d7c0f 100644 --- a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/pom.xml +++ b/skywalking-sdk-plugin/jedis-2.x-plugin/pom.xml @@ -30,6 +30,7 @@ redis.clients jedis 2.8.1 + compile diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java new file mode 100644 index 000000000..fc7d24e5f --- /dev/null +++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java @@ -0,0 +1,82 @@ +package org.skywalking.jedis.v2.plugin; + +import java.net.URI; + +import redis.clients.jedis.JedisShardInfo; + +import com.ai.cloud.skywalking.buriedpoint.RPCBuriedPointSender; +import com.ai.cloud.skywalking.model.Identification; +import com.ai.cloud.skywalking.model.Identification.IdentificationBuilder; +import com.ai.cloud.skywalking.plugin.interceptor.ConstructorInvokeContext; +import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext; +import com.ai.cloud.skywalking.plugin.interceptor.MethodInvokeContext; +import com.ai.cloud.skywalking.plugin.interceptor.assist.FirstInvokeInterceptor; + +public class JedisInterceptor extends FirstInvokeInterceptor { + private static final String REDIS_CONN_INFO_KEY = "redisConnInfo"; + + private static RPCBuriedPointSender sender = new RPCBuriedPointSender(); + + @Override + public void onConstruct(EnhancedClassInstanceContext context, + ConstructorInvokeContext interceptorContext) { + String redisConnInfo = ""; + if (interceptorContext.allArguments().length > 0) { + if (interceptorContext.allArguments()[0] instanceof String) { + redisConnInfo = (String) interceptorContext.allArguments()[0]; + if (interceptorContext.allArguments().length > 1) { + redisConnInfo += ":" + + (Integer) interceptorContext.allArguments()[1]; + } + } else if (interceptorContext.allArguments()[0] instanceof JedisShardInfo) { + JedisShardInfo shardInfo = (JedisShardInfo) interceptorContext + .allArguments()[0]; + redisConnInfo = shardInfo.getHost() + ":" + shardInfo.getPort(); + } else if (interceptorContext.allArguments()[0] instanceof URI) { + URI uri = (URI) interceptorContext.allArguments()[0]; + redisConnInfo = uri.getHost() + ":" + uri.getPort(); + } + } + context.set(REDIS_CONN_INFO_KEY, redisConnInfo); + } + + @Override + public void beforeMethod(EnhancedClassInstanceContext context, + MethodInvokeContext interceptorContext) { + if (this.isFirstBeforeMethod(context)) { + /** + * redis server wouldn't process rpc context. ignore the + * return(ContextData) of sender's beforeSend + */ + IdentificationBuilder builder = Identification + .newBuilder() + .viewPoint( + context.get(REDIS_CONN_INFO_KEY, String.class) + + " " + interceptorContext.methodName()) + .spanType(RedisBuriedPointType.instance()); + if (interceptorContext.allArguments().length > 0 + && interceptorContext.allArguments()[0] instanceof String) { + builder.businessKey("key=" + + interceptorContext.allArguments()[0]); + } + sender.beforeSend(builder.build()); + } + } + + @Override + public Object afterMethod(EnhancedClassInstanceContext context, + MethodInvokeContext interceptorContext, Object ret) { + if (this.isLastAfterMethod(context)) { + sender.afterSend(); + } + return ret; + } + + @Override + public void handleMethodException(Throwable t, + EnhancedClassInstanceContext context, + MethodInvokeContext interceptorContext, Object ret) { + sender.handleException(t); + } + +} diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/RedisBuriedPointType.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/RedisBuriedPointType.java new file mode 100644 index 000000000..b119f4549 --- /dev/null +++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/RedisBuriedPointType.java @@ -0,0 +1,29 @@ +package org.skywalking.jedis.v2.plugin; + +import com.ai.cloud.skywalking.api.IBuriedPointType; +import com.ai.cloud.skywalking.protocol.CallType; + +public class RedisBuriedPointType implements IBuriedPointType { + private static RedisBuriedPointType redisBuriedPointType; + + public static IBuriedPointType instance() { + if (redisBuriedPointType == null) { + redisBuriedPointType = new RedisBuriedPointType(); + } + + return redisBuriedPointType; + } + + + @Override + public String getTypeName() { + return "Redis"; + } + + @Override + public CallType getCallType() { + return CallType.SYNC; + } + + private RedisBuriedPointType(){} +} diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java similarity index 100% rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java rename to skywalking-sdk-plugin/jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/define/JedisPluginDefine.java diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/resources/skywalking-plugin.def b/skywalking-sdk-plugin/jedis-2.x-plugin/src/main/resources/skywalking-plugin.def similarity index 100% rename from skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/resources/skywalking-plugin.def rename to skywalking-sdk-plugin/jedis-2.x-plugin/src/main/resources/skywalking-plugin.def diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java new file mode 100644 index 000000000..98e0e1948 --- /dev/null +++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java @@ -0,0 +1,38 @@ +package org.skywalking.jedis.v2.plugin; + +import java.lang.reflect.InvocationTargetException; +import java.sql.SQLException; + +import org.junit.Test; + +import redis.clients.jedis.Jedis; + +import com.ai.cloud.skywalking.plugin.TracingBootstrap; + +public class JedisTest { + @Test + public void test() throws IllegalAccessException, IllegalArgumentException, + InvocationTargetException, NoSuchMethodException, + SecurityException, ClassNotFoundException { + TracingBootstrap + .main(new String[] { "org.skywalking.jedis.v2.plugin.JedisTest" }); + } + + public static void main(String[] args) throws ClassNotFoundException, + SQLException, InterruptedException { + try(Jedis jedis = new Jedis("10.1.241.18", 16379)){ + long start = System.currentTimeMillis(); + jedis.set("11111", "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); + for (int i = 0; i < 1; i++) { + jedis.get("11111"); + } + long end = System.currentTimeMillis(); + System.out.println(end - start + "ms"); + jedis.del("11111"); + } + } + + public void testNormal() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException, InterruptedException{ + JedisTest.main(null); + } +} diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/log4j2.xml b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/log4j2.xml new file mode 100644 index 000000000..4e2af7485 --- /dev/null +++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/log4j2.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/sky-walking.auth b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/sky-walking.auth new file mode 100644 index 000000000..c794ea37c --- /dev/null +++ b/skywalking-sdk-plugin/jedis-2.x-plugin/src/test/resources/sky-walking.auth @@ -0,0 +1,47 @@ +#skyWalking用户ID +skywalking.user_id=123 +#skyWalking应用编码 +skywalking.application_code=test +#skywalking auth的环境变量名字 +skywalking.auth_system_env_name=SKYWALKING_RUN +#skywalking数据编码 +skywalking.charset=UTF-8 + +#是否打印数据 +buriedpoint.printf=true +#埋点异常的最大长度 +buriedpoint.max_exception_stack_length=4000 +#业务字段的最大长度 +buriedpoint.businesskey_max_length=300 +#过滤异常 +buriedpoint.exclusive_exceptions=java.lang.RuntimeException + +#最大发送者的连接数阀比例 +sender.connect_percent=100 +#发送服务端配置 +sender.servers_addr=127.0.0.1:34000 +#最大发送的副本数量 +sender.max_copy_num=2 +#发送的最大长度 +sender.max_send_length=20000 +#当没有Sender时,尝试获取sender的等待周期 +sender.retry_get_sender_wait_interval=2000 +#是否开启发送消息 +sender.is_off=false + + +#最大消费线程数 +consumer.max_consumer=2 +#消费者最大等待时间 +consumer.max_wait_time=5 +#发送失败等待时间 +consumer.consumer_fail_retry_wait_interval=50 + +#每个Buffer的最大个数 +buffer.buffer_max_size=18000 +#Buffer池的最大长度 +buffer.pool_size=5 + +#发送检查线程检查周期 +senderchecker.check_polling_time=200 + diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java b/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java deleted file mode 100644 index 297093150..000000000 --- a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/main/java/org/skywalking/jedis/v2/plugin/JedisInterceptor.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.skywalking.jedis.v2.plugin; - -import com.ai.cloud.skywalking.plugin.interceptor.ConstructorInvokeContext; -import com.ai.cloud.skywalking.plugin.interceptor.EnhancedClassInstanceContext; -import com.ai.cloud.skywalking.plugin.interceptor.IAroundInterceptor; -import com.ai.cloud.skywalking.plugin.interceptor.MethodInvokeContext; - -public class JedisInterceptor implements IAroundInterceptor{ - - @Override - public void onConstruct(EnhancedClassInstanceContext context, - ConstructorInvokeContext interceptorContext) { - - } - - @Override - public void beforeMethod(EnhancedClassInstanceContext context, - MethodInvokeContext interceptorContext) { - - } - - @Override - public Object afterMethod(EnhancedClassInstanceContext context, - MethodInvokeContext interceptorContext, Object ret) { - return ret; - } - - @Override - public void handleMethodException(Throwable t, - EnhancedClassInstanceContext context, - MethodInvokeContext interceptorContext, Object ret) { - - } - -} diff --git a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java b/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java deleted file mode 100644 index 3e8200564..000000000 --- a/skywalking-sdk-plugin/skywalking-jedis-2.x-plugin/src/test/java/org/skywalking/jedis/v2/plugin/JedisTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.skywalking.jedis.v2.plugin; - -import java.lang.reflect.InvocationTargetException; -import java.sql.SQLException; - -import org.junit.Test; - -import com.ai.cloud.skywalking.plugin.TracingBootstrap; - -public class JedisTest { - - @Test - public void test() throws IllegalAccessException, - IllegalArgumentException, InvocationTargetException, - NoSuchMethodException, SecurityException, ClassNotFoundException { - TracingBootstrap - .main(new String[] { "org.skywalking.jedis.v2.plugin.JedisTest" }); - } - - public static void main(String[] args) throws ClassNotFoundException, - SQLException, InterruptedException {} - -} diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java index 82ceaaafa..c9396f12e 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/util/MachineUtil.java @@ -35,9 +35,10 @@ public class MachineUtil { if (StringUtil.isEmpty(IP)) { InetAddress netAddress = getInetAddress(); if (null == netAddress) { - return null; + IP = "N/A"; + }else{ + IP = netAddress.getHostAddress(); //get the ip address } - IP = netAddress.getHostAddress(); //get the ip address } return IP; } @@ -46,9 +47,10 @@ public class MachineUtil { if (StringUtil.isEmpty(hostName)) { InetAddress netAddress = getInetAddress(); if (null == netAddress) { - return null; + hostName = "N/A"; + }else{ + hostName = netAddress.getHostName(); //get the host address } - hostName = netAddress.getHostName(); //get the host address } return hostName; }