diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/RemoteDownstreamConfig.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/RemoteDownstreamConfig.java index 71df9b810..cbfb00460 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/RemoteDownstreamConfig.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/RemoteDownstreamConfig.java @@ -10,6 +10,8 @@ import org.skywalking.apm.agent.core.dictionary.DictionaryUtil; public class RemoteDownstreamConfig { public static class Agent { public volatile static int APPLICATION_ID = DictionaryUtil.nullValue(); + + public volatile static int APPLICATION_INSTANCE_ID = DictionaryUtil.nullValue(); } public static class Collector { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextManager.java index 6a7c96470..d72c3d10f 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextManager.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextManager.java @@ -36,12 +36,9 @@ public class ContextManager implements TracingContextListener, BootService, Igno } context = new IgnoredTracerContext(); } else { - if (RemoteDownstreamConfig.Agent.APPLICATION_ID == DictionaryUtil.nullValue()) { - /** - * Can't register to collector, no need to trace anything. - */ - context = new IgnoredTracerContext(); - } else { + if (RemoteDownstreamConfig.Agent.APPLICATION_ID != DictionaryUtil.nullValue() + || RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID != DictionaryUtil.nullValue() + ) { int suffixIdx = operationName.lastIndexOf("."); if (suffixIdx > -1 && Config.Agent.IGNORE_SUFFIX.contains(operationName.substring(suffixIdx))) { context = new IgnoredTracerContext(); @@ -53,6 +50,11 @@ public class ContextManager implements TracingContextListener, BootService, Igno context = new IgnoredTracerContext(); } } + } else { + /** + * Can't register to collector, no need to trace anything. + */ + context = new IgnoredTracerContext(); } } CONTEXT.set(context); diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java index dbca8a3c5..8577a4297 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java @@ -51,14 +51,6 @@ public class TraceSegment { */ private List spans; - /** - * The applicationId represents a name of current application/JVM and indicates which is business - * role in the cluster. - *

- * e.g. account_app, billing_app - */ - private int applicationId; - /** * The relatedGlobalTraces represent a set of all related trace. Most time it contains only one * element, because only one parent {@link TraceSegment} exists, but, in batch scenario, the num becomes greater @@ -82,20 +74,6 @@ public class TraceSegment { * and generate a new segment id. */ public TraceSegment() { - this.applicationId = (Integer)DictionaryManager.findApplicationCodeSection() - .find(Config.Agent.APPLICATION_CODE) - .doInCondition( - new PossibleFound.FoundAndObtain() { - @Override public Object doProcess(int applicationId) { - return applicationId; - } - }, - new PossibleFound.NotFoundAndObtain() { - @Override public Object doProcess() { - throw new IllegalStateException("Application id must not NULL."); - } - } - ); this.traceSegmentId = GlobalIdGenerator.generate(ID_TYPE); this.spans = new LinkedList(); this.relatedGlobalTraces = new DistributedTraceIds(); @@ -154,7 +132,7 @@ public class TraceSegment { } public int getApplicationId() { - return applicationId; + return RemoteDownstreamConfig.Agent.APPLICATION_ID; } public boolean hasRef() { @@ -206,8 +184,8 @@ public class TraceSegment { for (AbstractTracingSpan span : this.spans) { traceSegmentBuilder.addSpans(span.transform()); } - traceSegmentBuilder.setApplicationId(this.applicationId); - traceSegmentBuilder.setApplicationInstanceId(RemoteDownstreamConfig.Agent.APPLICATION_ID); + traceSegmentBuilder.setApplicationId(RemoteDownstreamConfig.Agent.APPLICATION_ID); + traceSegmentBuilder.setApplicationInstanceId(RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID); upstreamBuilder.setSegment(traceSegmentBuilder.build().toByteString()); return upstreamBuilder.build(); @@ -219,7 +197,6 @@ public class TraceSegment { "traceSegmentId='" + traceSegmentId + '\'' + ", refs=" + refs + ", spans=" + spans + - ", applicationId='" + applicationId + '\'' + ", relatedGlobalTraces=" + relatedGlobalTraces + '}'; } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPool.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPool.java index 3b4ec68d0..6713ad465 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPool.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPool.java @@ -28,6 +28,7 @@ public class ConsumerPool { prototype.init(); for (int i = 0; i < num; i++) { consumerThreads[i] = new ConsumerThread("DataCarrier.Consumser." + i + ".Thread", prototype); + consumerThreads[i].setDaemon(true); } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/JVMService.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/JVMService.java index c6bc089f4..d4faec75a 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/JVMService.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/jvm/JVMService.java @@ -10,6 +10,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; import org.skywalking.apm.agent.core.boot.BootService; import org.skywalking.apm.agent.core.boot.ServiceManager; +import org.skywalking.apm.agent.core.conf.RemoteDownstreamConfig; +import org.skywalking.apm.agent.core.dictionary.DictionaryUtil; import org.skywalking.apm.agent.core.jvm.cpu.CPUProvider; import org.skywalking.apm.agent.core.jvm.gc.GCProvider; import org.skywalking.apm.agent.core.jvm.memory.MemoryProvider; @@ -59,32 +61,36 @@ public class JVMService implements BootService, Runnable { @Override public void run() { - long currentTimeMillis = System.currentTimeMillis(); - Date day = new Date(currentTimeMillis); - String second = sdf.format(day); - int blockIndex = Integer.parseInt(second) / 15; - if (blockIndex != lastBlockIdx) { - lastBlockIdx = blockIndex; - try { - JVMMetric.Builder jvmBuilder = JVMMetric.newBuilder(); - jvmBuilder.setTime(currentTimeMillis); - jvmBuilder.setCpu(CPUProvider.INSTANCE.getCpuMetric()); - jvmBuilder.addAllMemory(MemoryProvider.INSTANCE.getMemoryMetricList()); - jvmBuilder.addAllMemoryPool(MemoryPoolProvider.INSTANCE.getMemoryPoolMetricList()); - jvmBuilder.addAllGc(GCProvider.INSTANCE.getGCList()); - - JVMMetric jvmMetric = jvmBuilder.build(); - lock.lock(); + if (RemoteDownstreamConfig.Agent.APPLICATION_ID != DictionaryUtil.nullValue() + && RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID != DictionaryUtil.nullValue() + ) { + long currentTimeMillis = System.currentTimeMillis(); + Date day = new Date(currentTimeMillis); + String second = sdf.format(day); + int blockIndex = Integer.parseInt(second) / 15; + if (blockIndex != lastBlockIdx) { + lastBlockIdx = blockIndex; try { - buffer.add(jvmMetric); - while (buffer.size() > 4) { - buffer.removeFirst(); + JVMMetric.Builder jvmBuilder = JVMMetric.newBuilder(); + jvmBuilder.setTime(currentTimeMillis); + jvmBuilder.setCpu(CPUProvider.INSTANCE.getCpuMetric()); + jvmBuilder.addAllMemory(MemoryProvider.INSTANCE.getMemoryMetricList()); + jvmBuilder.addAllMemoryPool(MemoryPoolProvider.INSTANCE.getMemoryPoolMetricList()); + jvmBuilder.addAllGc(GCProvider.INSTANCE.getGCList()); + + JVMMetric jvmMetric = jvmBuilder.build(); + lock.lock(); + try { + buffer.add(jvmMetric); + while (buffer.size() > 4) { + buffer.removeFirst(); + } + } finally { + lock.unlock(); } - } finally { - lock.unlock(); + } catch (Exception e) { + logger.error(e, "Collect JVM info fail."); } - } catch (Exception e) { - logger.error(e, "Collect JVM info fail."); } } } @@ -95,20 +101,25 @@ public class JVMService implements BootService, Runnable { @Override public void run() { - if (status == GRPCChannelStatus.CONNECTED) { - try { - JVMMetrics.Builder builder = JVMMetrics.newBuilder(); - lock.lock(); + if (RemoteDownstreamConfig.Agent.APPLICATION_ID != DictionaryUtil.nullValue() + && RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID != DictionaryUtil.nullValue() + ) { + if (status == GRPCChannelStatus.CONNECTED) { try { - builder.addAllMetrics(buffer); - buffer.clear(); - } finally { - lock.unlock(); - } + JVMMetrics.Builder builder = JVMMetrics.newBuilder(); + lock.lock(); + try { + builder.addAllMetrics(buffer); + buffer.clear(); + } finally { + lock.unlock(); + } - stub.collect(builder.build()); - } catch (Throwable t) { - logger.error(t, "send JVM metrics to Collector fail."); + builder.setApplicationInstanceId(RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID); + stub.collect(builder.build()); + } catch (Throwable t) { + logger.error(t, "send JVM metrics to Collector fail."); + } } } }