diff --git a/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java b/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java index ca02cfb2d..801251cfb 100644 --- a/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java +++ b/skywalking-collector/skywalking-agent/src/main/java/com/ai/cloud/skywalking/agent/SkywalkingAgent.java @@ -2,32 +2,38 @@ package com.ai.cloud.skywalking.agent; import com.ai.cloud.skywalking.conf.AuthDesc; import com.ai.cloud.skywalking.conf.Config; -import com.ai.cloud.skywalking.conf.ConfigInitializer; import com.ai.cloud.skywalking.logging.LogManager; import com.ai.cloud.skywalking.logging.Logger; import com.ai.cloud.skywalking.plugin.*; import com.ai.cloud.skywalking.plugin.boot.IBootPluginDefine; import net.bytebuddy.agent.builder.AgentBuilder; +import net.bytebuddy.description.NamedElement; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; +import java.io.File; import java.lang.instrument.Instrumentation; +import java.net.URL; import java.util.List; public class SkywalkingAgent { private static Logger logger = LogManager.getLogger(SkywalkingAgent.class); + + public static void premain(String agentArgs, Instrumentation instrumentation) throws PluginException { - Config.SkyWalking.IS_PREMAIN_MODE = true; - if (!AuthDesc.isAuth()) { + initConfig(); + if (AuthDesc.isAuth()) { List plugins = new PluginBootstrap().loadPlugins(); + logger.info("Loaded " + plugins.size() + " plugin"); final PluginDefineCategory pluginDefineCategory = PluginDefineCategory.category(plugins); startBootPluginDefines(pluginDefineCategory.getBootPluginsDefines()); - new AgentBuilder.Default().type(ElementMatchers.any()).transform(new AgentBuilder.Transformer() { + new AgentBuilder.Default().type(exclusivePackageClass()).transform(new AgentBuilder.Transformer() { public DynamicType.Builder transform(DynamicType.Builder builder, TypeDescription typeDescription, ClassLoader classLoader) { AbstractClassEnhancePluginDefine pluginDefine = pluginDefineCategory.getClassEnhancePluginDefines().get(typeDescription.getTypeName()); if (pluginDefine == null) { @@ -36,7 +42,8 @@ public class SkywalkingAgent { try { return pluginDefine.define(builder); - } catch (PluginException e) { + } catch (Throwable e) { + e.printStackTrace(); logger.error("Failed to enhance plugin " + pluginDefine.getClass().getName(), e); return builder; } @@ -46,10 +53,36 @@ public class SkywalkingAgent { } } + private static ElementMatcher.Junction exclusivePackageClass() { + return ElementMatchers.nameStartsWith("com.alibaba"); + } + public static void startBootPluginDefines(List IBootPluginDefines) throws PluginException { for (IBootPluginDefine bootPluginDefine : IBootPluginDefines) { bootPluginDefine.boot(); } } + + + private static String generateLocationPath() { + return SkywalkingAgent.class.getName().replaceAll("\\.", "/") + ".class"; + } + + + private static void initConfig() { + Config.SkyWalking.IS_PREMAIN_MODE = true; + Config.SkyWalking.AGENT_BASE_PATH = initAgentBasePath(); + } + + private static String initAgentBasePath() { + try { + String urlString = SkywalkingAgent.class.getClassLoader().getSystemClassLoader().getResource(generateLocationPath()).toString(); + urlString = urlString.substring(urlString.indexOf("file:"), urlString.indexOf('!')); + return new File(new URL(urlString).getFile()).getParentFile().getAbsolutePath(); + } catch (Exception e) { + logger.error("Failed to init config .", e); + return ""; + } + } } diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java index 91ea39edf..04f9acc62 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/AuthDesc.java @@ -7,7 +7,6 @@ import com.ai.cloud.skywalking.selfexamination.SDKHealthCollector; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; -import java.net.URL; public class AuthDesc { private static Logger logger = LogManager.getLogger(AuthDesc.class); @@ -28,23 +27,13 @@ public class AuthDesc { private static InputStream fetchAuthFileInputStream() { try { - InputStream authFileInputStream; - String urlString = ClassLoader.getSystemClassLoader().getResource(generateLocationPath()).toString(); - urlString = urlString.substring(urlString.indexOf("file:"), urlString.indexOf('!')); - URL url = new URL(urlString); - File file = new File(url.toURI()); - authFileInputStream = new FileInputStream(file.getParentFile().getName() + File.separator + "/sky-walking.auth"); - return authFileInputStream; + return new FileInputStream(Config.SkyWalking.AGENT_BASE_PATH + File.separator + "/sky-walking.auth"); } catch (Exception e) { logger.error("Error to fetch auth file input stream.", e); return null; } } - private static String generateLocationPath() { - return AuthDesc.class.getName().replaceAll(".", "/") + ".class"; - } - public static boolean isAuth() { return isAuth; } diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java index 4a57a1b6f..9c0ef3c96 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/conf/Config.java @@ -16,6 +16,8 @@ public class Config { public static boolean ALL_METHOD_MONITOR = false; public static boolean IS_PREMAIN_MODE = false; + + public static String AGENT_BASE_PATH = ""; } public static class BuriedPoint { diff --git a/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCPluginDefineI.java b/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCPluginDefine.java similarity index 96% rename from skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCPluginDefineI.java rename to skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCPluginDefine.java index 0d2c83624..dce420426 100644 --- a/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCPluginDefineI.java +++ b/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/java/com/ai/cloud/skywalking/plugin/jdbc/JDBCPluginDefine.java @@ -10,8 +10,8 @@ import com.ai.cloud.skywalking.logging.Logger; import com.ai.cloud.skywalking.plugin.boot.BootException; import com.ai.cloud.skywalking.plugin.boot.IBootPluginDefine; -public class JDBCPluginDefineI implements IBootPluginDefine { - private static Logger logger = LogManager.getLogger(JDBCPluginDefineI.class); +public class JDBCPluginDefine implements IBootPluginDefine { + private static Logger logger = LogManager.getLogger(JDBCPluginDefine.class); @Override public void boot() throws BootException { diff --git a/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/resources/skywalking-plugin.def b/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/resources/skywalking-plugin.def index 189081ed9..c371f19ab 100644 --- a/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/resources/skywalking-plugin.def +++ b/skywalking-collector/skywalking-sdk-plugin/jdbc-plugin/src/main/resources/skywalking-plugin.def @@ -1 +1 @@ -com.ai.cloud.skywalking.plugin.jdbc.JDBCPluginDefineI +com.ai.cloud.skywalking.plugin.jdbc.JDBCPluginDefine