diff --git a/README.md b/README.md index bcdb0036a..b2ef5ad24 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Sky Walking | [中文](README_ZH.md) # Document -* [WIKI](https://github.com/OpenSkywalking/skywalking/wiki) +[![EN doc](https://img.shields.io/badge/document-English-blue.svg)](docs/README.md) [![cn doc](https://img.shields.io/badge/document-中文-blue.svg)](docs/README_ZH.md) This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com. diff --git a/README_ZH.md b/README_ZH.md index 32374fd75..8f486309b 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -28,7 +28,7 @@ Sky Walking | [English](README.md) # Document -* [WIKI](https://github.com/OpenSkywalking/skywalking/wiki) +[![EN doc](https://img.shields.io/badge/document-English-blue.svg)](docs/README.md) [![cn doc](https://img.shields.io/badge/document-中文-blue.svg)](docs/README_ZH.md) This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to wu.sheng@foxmail.com. diff --git a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml index a5dfb5220..46334d582 100644 --- a/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-log4j-1.x/pom.xml @@ -23,7 +23,7 @@ apm-application-toolkit org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml index 002d67dba..ab3778be8 100644 --- a/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-log4j-2.x/pom.xml @@ -23,7 +23,7 @@ apm-application-toolkit org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml index a5ea91e8a..e51649ba5 100644 --- a/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml +++ b/apm-application-toolkit/apm-toolkit-logback-1.x/pom.xml @@ -23,7 +23,7 @@ apm-application-toolkit org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/skywalking/apm/toolkit/log/logback/v1/x/mdc/LogbackMDCPatternConverter.java b/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/skywalking/apm/toolkit/log/logback/v1/x/mdc/LogbackMDCPatternConverter.java new file mode 100644 index 000000000..e1c8d7b08 --- /dev/null +++ b/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/skywalking/apm/toolkit/log/logback/v1/x/mdc/LogbackMDCPatternConverter.java @@ -0,0 +1,48 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.toolkit.log.logback.v1.x.mdc; + +import ch.qos.logback.classic.pattern.MDCConverter; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.util.OptionHelper; + +/** + * @author zhangkewei + */ +public class LogbackMDCPatternConverter extends MDCConverter { + private static final String CONVERT_KEY = "tid"; + + private boolean convert4TID = false; + @Override + public void start() { + super.start(); + String[] key = OptionHelper.extractDefaultReplacement(getFirstOption()); + if (null != key && key.length > 0 && CONVERT_KEY.equals(key[0])) { + convert4TID = true; + } + } + @Override + public String convert(ILoggingEvent iLoggingEvent) { + return convert4TID ? convertTID() : super.convert(iLoggingEvent); + } + + public String convertTID() { + return "TID: N/A"; + } +} diff --git a/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/skywalking/apm/toolkit/log/logback/v1/x/mdc/TraceIdMDCPatternLogbackLayout.java b/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/skywalking/apm/toolkit/log/logback/v1/x/mdc/TraceIdMDCPatternLogbackLayout.java new file mode 100644 index 000000000..d67142578 --- /dev/null +++ b/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/skywalking/apm/toolkit/log/logback/v1/x/mdc/TraceIdMDCPatternLogbackLayout.java @@ -0,0 +1,31 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.toolkit.log.logback.v1.x.mdc; + +import ch.qos.logback.classic.PatternLayout; + +/** + * Override "X",SuperClass run before Subclass. + * @author zhangkewei + */ +public class TraceIdMDCPatternLogbackLayout extends PatternLayout { + static { + defaultConverterMap.put("X", LogbackMDCPatternConverter.class.getName()); + } +} diff --git a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml index ec4534b03..cb7f2e989 100644 --- a/apm-application-toolkit/apm-toolkit-opentracing/pom.xml +++ b/apm-application-toolkit/apm-toolkit-opentracing/pom.xml @@ -23,7 +23,7 @@ apm-application-toolkit org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-application-toolkit/apm-toolkit-trace/pom.xml b/apm-application-toolkit/apm-toolkit-trace/pom.xml index edf30ac88..4489fd577 100644 --- a/apm-application-toolkit/apm-toolkit-trace/pom.xml +++ b/apm-application-toolkit/apm-toolkit-trace/pom.xml @@ -22,7 +22,7 @@ apm-application-toolkit org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-application-toolkit/pom.xml b/apm-application-toolkit/pom.xml index 830919418..0d4ab34f7 100644 --- a/apm-application-toolkit/pom.xml +++ b/apm-application-toolkit/pom.xml @@ -21,7 +21,7 @@ apm org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 apm-application-toolkit diff --git a/apm-collector-3.2.3/apm-collector-agentjvm/pom.xml b/apm-collector-3.2.3/apm-collector-agentjvm/pom.xml index 85825a005..1eaee624a 100644 --- a/apm-collector-3.2.3/apm-collector-agentjvm/pom.xml +++ b/apm-collector-3.2.3/apm-collector-agentjvm/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-agentregister/pom.xml b/apm-collector-3.2.3/apm-collector-agentregister/pom.xml index db44ba6ba..1e988fada 100644 --- a/apm-collector-3.2.3/apm-collector-agentregister/pom.xml +++ b/apm-collector-3.2.3/apm-collector-agentregister/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-agentserver/pom.xml b/apm-collector-3.2.3/apm-collector-agentserver/pom.xml index 5c4cf9c1c..8d936b29d 100644 --- a/apm-collector-3.2.3/apm-collector-agentserver/pom.xml +++ b/apm-collector-3.2.3/apm-collector-agentserver/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-agentstream/pom.xml b/apm-collector-3.2.3/apm-collector-agentstream/pom.xml index cf9c317da..f709582d2 100644 --- a/apm-collector-3.2.3/apm-collector-agentstream/pom.xml +++ b/apm-collector-3.2.3/apm-collector-agentstream/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java index 01c98fa1c..26026dc09 100644 --- a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java +++ b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/component/NodeComponentSpanListener.java @@ -60,6 +60,7 @@ public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanLis } nodeComponent.setPeerId(spanDecorator.getPeerId()); + nodeComponent.setPeer(Const.EMPTY_STRING); id = id + Const.ID_SPLIT + nodeComponent.getPeerId(); nodeComponent.setId(id); nodeComponents.add(nodeComponent); @@ -81,6 +82,7 @@ public class NodeComponentSpanListener implements EntrySpanListener, ExitSpanLis } nodeComponent.setPeerId(applicationId); + nodeComponent.setPeer(Const.EMPTY_STRING); id = id + Const.ID_SPLIT + String.valueOf(applicationId); nodeComponent.setId(id); diff --git a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java index 6cbe12ffa..d0b76fe34 100644 --- a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java +++ b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/node/mapping/NodeMappingSpanListener.java @@ -51,6 +51,7 @@ public class NodeMappingSpanListener implements RefsListener, FirstSpanListener NodeMappingDataDefine.NodeMapping nodeMapping = new NodeMappingDataDefine.NodeMapping(); nodeMapping.setApplicationId(applicationId); nodeMapping.setAddressId(referenceDecorator.getNetworkAddressId()); + nodeMapping.setAddress(Const.EMPTY_STRING); String id = String.valueOf(applicationId) + Const.ID_SPLIT + String.valueOf(nodeMapping.getAddressId()); nodeMapping.setId(id); nodeMappings.add(nodeMapping); diff --git a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java index 8455922d0..8e309c69e 100644 --- a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java +++ b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/noderef/NodeReferenceSpanListener.java @@ -53,6 +53,7 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference(); nodeReference.setFrontApplicationId(applicationId); nodeReference.setBehindApplicationId(spanDecorator.getPeerId()); + nodeReference.setBehindPeer(Const.EMPTY_STRING); nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime())); StringBuilder idBuilder = new StringBuilder(); @@ -79,6 +80,7 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference(); nodeReference.setFrontApplicationId(Const.USER_ID); nodeReference.setBehindApplicationId(applicationId); + nodeReference.setBehindPeer(Const.EMPTY_STRING); nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanDecorator.getStartTime())); String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() + @@ -96,6 +98,7 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference(); referenceSum.setFrontApplicationId(parentApplicationId); referenceSum.setBehindApplicationId(applicationId); + referenceSum.setBehindPeer(Const.EMPTY_STRING); references.add(referenceSum); } diff --git a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java index c25b66525..0115fc58e 100644 --- a/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java +++ b/apm-collector-3.2.3/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/serviceref/ServiceReferenceSpanListener.java @@ -127,12 +127,15 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa idBuilder.append(entryServiceId).append(Const.ID_SPLIT); serviceReference.setEntryServiceId(entryServiceId); + serviceReference.setEntryServiceName(Const.EMPTY_STRING); idBuilder.append(frontServiceId).append(Const.ID_SPLIT); serviceReference.setFrontServiceId(frontServiceId); + serviceReference.setFrontServiceName(Const.EMPTY_STRING); idBuilder.append(behindServiceId); serviceReference.setBehindServiceId(behindServiceId); + serviceReference.setBehindServiceName(Const.EMPTY_STRING); serviceReference.setId(idBuilder.toString()); serviceReference.setTimeBucket(timeBucket); diff --git a/apm-collector-3.2.3/apm-collector-boot/pom.xml b/apm-collector-3.2.3/apm-collector-boot/pom.xml index 24cf9a221..ae19d6fff 100644 --- a/apm-collector-3.2.3/apm-collector-boot/pom.xml +++ b/apm-collector-3.2.3/apm-collector-boot/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-cache/pom.xml b/apm-collector-3.2.3/apm-collector-cache/pom.xml index cad8a0c03..0b1dfbb0a 100644 --- a/apm-collector-3.2.3/apm-collector-cache/pom.xml +++ b/apm-collector-3.2.3/apm-collector-cache/pom.xml @@ -5,7 +5,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -24,4 +24,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector-3.2.3/apm-collector-client/pom.xml b/apm-collector-3.2.3/apm-collector-client/pom.xml index 9e7710c04..d6ea5c4f3 100644 --- a/apm-collector-3.2.3/apm-collector-client/pom.xml +++ b/apm-collector-3.2.3/apm-collector-client/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-cluster/pom.xml b/apm-collector-3.2.3/apm-collector-cluster/pom.xml index 3ac35f1c6..77d472d42 100644 --- a/apm-collector-3.2.3/apm-collector-cluster/pom.xml +++ b/apm-collector-3.2.3/apm-collector-cluster/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-core/pom.xml b/apm-collector-3.2.3/apm-collector-core/pom.xml index ab8795e0b..719ffe822 100644 --- a/apm-collector-3.2.3/apm-collector-core/pom.xml +++ b/apm-collector-3.2.3/apm-collector-core/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-queue/pom.xml b/apm-collector-3.2.3/apm-collector-queue/pom.xml index b6e8b9762..8fad53f35 100644 --- a/apm-collector-3.2.3/apm-collector-queue/pom.xml +++ b/apm-collector-3.2.3/apm-collector-queue/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/disruptor/DisruptorQueueCreator.java b/apm-collector-3.2.3/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/disruptor/DisruptorQueueCreator.java index 8cdca483b..320a22206 100644 --- a/apm-collector-3.2.3/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/disruptor/DisruptorQueueCreator.java +++ b/apm-collector-3.2.3/apm-collector-queue/src/main/java/org/skywalking/apm/collector/queue/disruptor/DisruptorQueueCreator.java @@ -18,6 +18,7 @@ package org.skywalking.apm.collector.queue.disruptor; +import com.lmax.disruptor.ExceptionHandler; import com.lmax.disruptor.RingBuffer; import com.lmax.disruptor.dsl.Disruptor; import org.skywalking.apm.collector.core.queue.DaemonThreadFactory; @@ -25,12 +26,16 @@ import org.skywalking.apm.collector.core.queue.MessageHolder; import org.skywalking.apm.collector.core.queue.QueueCreator; import org.skywalking.apm.collector.core.queue.QueueEventHandler; import org.skywalking.apm.collector.core.queue.QueueExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author peng-yongsheng */ public class DisruptorQueueCreator implements QueueCreator { + private final Logger logger = LoggerFactory.getLogger(DisruptorQueueCreator.class); + @Override public QueueEventHandler create(int queueSize, QueueExecutor executor) { // Specify the size of the ring buffer, must be power of 2. if (!((((queueSize - 1) & queueSize) == 0) && queueSize != 0)) { @@ -40,6 +45,20 @@ public class DisruptorQueueCreator implements QueueCreator { // Construct the Disruptor Disruptor disruptor = new Disruptor(MessageHolderFactory.INSTANCE, queueSize, DaemonThreadFactory.INSTANCE); + disruptor.setDefaultExceptionHandler(new ExceptionHandler() { + @Override public void handleEventException(Throwable ex, long sequence, MessageHolder event) { + logger.error("handler message error! message: {}.", event.getMessage(), ex); + } + + @Override public void handleOnStartException(Throwable ex) { + logger.error("create disruptor failed!", ex); + } + + @Override public void handleOnShutdownException(Throwable ex) { + logger.error("shutdown disruptor failed!", ex); + } + }); + RingBuffer ringBuffer = disruptor.getRingBuffer(); DisruptorEventHandler eventHandler = new DisruptorEventHandler(ringBuffer, executor); diff --git a/apm-collector-3.2.3/apm-collector-remote/pom.xml b/apm-collector-3.2.3/apm-collector-remote/pom.xml index 7750e45cb..19674c4c8 100644 --- a/apm-collector-3.2.3/apm-collector-remote/pom.xml +++ b/apm-collector-3.2.3/apm-collector-remote/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-server/pom.xml b/apm-collector-3.2.3/apm-collector-server/pom.xml index 7e80186bd..3ff913821 100644 --- a/apm-collector-3.2.3/apm-collector-server/pom.xml +++ b/apm-collector-3.2.3/apm-collector-server/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-storage/pom.xml b/apm-collector-3.2.3/apm-collector-storage/pom.xml index 0cdbfe074..87c09011a 100644 --- a/apm-collector-3.2.3/apm-collector-storage/pom.xml +++ b/apm-collector-3.2.3/apm-collector-storage/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-stream/pom.xml b/apm-collector-3.2.3/apm-collector-stream/pom.xml index 2abb8bcda..d34062e17 100644 --- a/apm-collector-3.2.3/apm-collector-stream/pom.xml +++ b/apm-collector-3.2.3/apm-collector-stream/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/apm-collector-ui/pom.xml b/apm-collector-3.2.3/apm-collector-ui/pom.xml index d1b4b2ca5..afe5bcf0b 100644 --- a/apm-collector-3.2.3/apm-collector-ui/pom.xml +++ b/apm-collector-3.2.3/apm-collector-ui/pom.xml @@ -23,7 +23,7 @@ apm-collector-3.2.3 org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector-3.2.3/pom.xml b/apm-collector-3.2.3/pom.xml index a3eee4619..549f426e7 100644 --- a/apm-collector-3.2.3/pom.xml +++ b/apm-collector-3.2.3/pom.xml @@ -40,7 +40,7 @@ apm org.skywalking - 3.2.3-2017 + 3.2.4-2017 apm-collector-3.2.3 pom diff --git a/apm-collector/apm-collector-agent/collector-agent-define/pom.xml b/apm-collector/apm-collector-agent/collector-agent-define/pom.xml index 7dc8b36a9..21b3a90fd 100644 --- a/apm-collector/apm-collector-agent/collector-agent-define/pom.xml +++ b/apm-collector/apm-collector-agent/collector-agent-define/pom.xml @@ -23,11 +23,11 @@ apm-collector-agent org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-agent-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-agent/collector-agent-grpc-provider/pom.xml b/apm-collector/apm-collector-agent/collector-agent-grpc-provider/pom.xml index 610de903e..e8cc6071b 100644 --- a/apm-collector/apm-collector-agent/collector-agent-grpc-provider/pom.xml +++ b/apm-collector/apm-collector-agent/collector-agent-grpc-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-agent org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -47,4 +47,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-agent/collector-agent-jetty-provider/pom.xml b/apm-collector/apm-collector-agent/collector-agent-jetty-provider/pom.xml index 07cf7ea23..76638a1c3 100644 --- a/apm-collector/apm-collector-agent/collector-agent-jetty-provider/pom.xml +++ b/apm-collector/apm-collector-agent/collector-agent-jetty-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-agent org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -42,4 +42,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-agent/collector-agent-stream/pom.xml b/apm-collector/apm-collector-agent/collector-agent-stream/pom.xml index 5c1285c3f..9075a16ae 100644 --- a/apm-collector/apm-collector-agent/collector-agent-stream/pom.xml +++ b/apm-collector/apm-collector-agent/collector-agent-stream/pom.xml @@ -23,13 +23,14 @@ apm-collector-agent org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-agent-stream jar +<<<<<<< HEAD org.skywalking @@ -37,4 +38,8 @@ ${project.version} - \ No newline at end of file + +======= + + +>>>>>>> 406c4f52d8251eb81aa868ec38f17789e18e0dc0 diff --git a/apm-collector/apm-collector-agent/pom.xml b/apm-collector/apm-collector-agent/pom.xml index fa334830f..815f54994 100644 --- a/apm-collector/apm-collector-agent/pom.xml +++ b/apm-collector/apm-collector-agent/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -25,4 +25,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-boot/pom.xml b/apm-collector/apm-collector-boot/pom.xml index acae89589..05ef93a05 100644 --- a/apm-collector/apm-collector-boot/pom.xml +++ b/apm-collector/apm-collector-boot/pom.xml @@ -23,7 +23,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-cache/pom.xml b/apm-collector/apm-collector-cache/pom.xml index e901f5e27..55983ea3a 100644 --- a/apm-collector/apm-collector-cache/pom.xml +++ b/apm-collector/apm-collector-cache/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -24,4 +24,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml index 582b5f533..7ab818226 100644 --- a/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml +++ b/apm-collector/apm-collector-cluster/collector-cluster-define/pom.xml @@ -23,11 +23,11 @@ apm-collector-cluster org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-cluster-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml index 7392f98cf..0aa6f15cb 100644 --- a/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml +++ b/apm-collector/apm-collector-cluster/collector-cluster-redis-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-cluster org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml index 6ef4e4076..6803fbdd0 100644 --- a/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml +++ b/apm-collector/apm-collector-cluster/collector-cluster-standalone-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-cluster org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml index ce8d169bc..b29b973fb 100644 --- a/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml +++ b/apm-collector/apm-collector-cluster/collector-cluster-zookeeper-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-cluster org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-cluster/pom.xml b/apm-collector/apm-collector-cluster/pom.xml index f0b2e2935..341bbbace 100644 --- a/apm-collector/apm-collector-cluster/pom.xml +++ b/apm-collector/apm-collector-cluster/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-component/client-component/pom.xml b/apm-collector/apm-collector-component/client-component/pom.xml index 21e367804..066325e21 100644 --- a/apm-collector/apm-collector-component/client-component/pom.xml +++ b/apm-collector/apm-collector-component/client-component/pom.xml @@ -5,7 +5,7 @@ apm-collector-component org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -55,4 +55,4 @@ 1.4.0 - \ No newline at end of file + diff --git a/apm-collector/apm-collector-component/pom.xml b/apm-collector/apm-collector-component/pom.xml index 31317c644..af78e4f0e 100644 --- a/apm-collector/apm-collector-component/pom.xml +++ b/apm-collector/apm-collector-component/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -23,4 +23,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-component/server-component/pom.xml b/apm-collector/apm-collector-component/server-component/pom.xml index a0c33f864..0238d63e0 100644 --- a/apm-collector/apm-collector-component/server-component/pom.xml +++ b/apm-collector/apm-collector-component/server-component/pom.xml @@ -5,7 +5,7 @@ apm-collector-component org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -33,4 +33,4 @@ ${jetty.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-core/pom.xml b/apm-collector/apm-collector-core/pom.xml index 4cb512837..3ab0bc9dc 100644 --- a/apm-collector/apm-collector-core/pom.xml +++ b/apm-collector/apm-collector-core/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/DirectWay.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/DirectWay.java new file mode 100644 index 000000000..bdf85745f --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/DirectWay.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.graph; + +/** + * @author wusheng + */ +public class DirectWay extends WayToNode { + public DirectWay(NodeProcessor destinationHandler) { + super(destinationHandler); + } + + @Override protected void in(INPUT o) { + out(o); + } +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Graph.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Graph.java index 13d4ea729..32a790f3e 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Graph.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Graph.java @@ -43,24 +43,25 @@ public final class Graph { } } - public Next findNext(int handlerId) { - Node node = nodeIndex.get(handlerId); - if (node == null) { - throw new NodeNotFoundException("Can't find node with handlerId=" - + handlerId - + " in graph[" + id + "】"); - } - return node.getNext(); - } - void checkForNewNode(Node node) { int nodeId = node.getHandler().id(); if (nodeIndex.containsKey(nodeId)) { - throw new PotentialAcyclicGraphException("handler=" + throw new PotentialCyclicGraphException("handler=" + node.getHandler().getClass().getName() + " already exists in graph[" + id + "】"); } nodeIndex.put(nodeId, node); } + public GraphNodeFinder toFinder() { + return new GraphNodeFinder(this); + } + + ConcurrentHashMap getNodeIndex() { + return nodeIndex; + } + + int getId() { + return id; + } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphManager.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphManager.java index a77d9de9b..b0803a951 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphManager.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphManager.java @@ -52,4 +52,8 @@ public enum GraphManager { } return graph; } + + public void reset() { + allGraphs.clear(); + } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphNodeFinder.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphNodeFinder.java new file mode 100644 index 000000000..b48a01516 --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/GraphNodeFinder.java @@ -0,0 +1,62 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.graph; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author wu-sheng + */ +public class GraphNodeFinder { + private Graph graph; + + GraphNodeFinder(Graph graph) { + this.graph = graph; + } + + /** + * Find an exist node to build the graph. + * + * @param handlerId of specific node in graph. + * @param outputClass of the found node + * @param type of given output class + * @return Node instance. + */ + public Node findNode(int handlerId, Class outputClass) { + ConcurrentHashMap graphNodeIndex = graph.getNodeIndex(); + Node node = graphNodeIndex.get(handlerId); + if (node == null) { + throw new NodeNotFoundException("Can't find node with handlerId=" + + handlerId + + " in graph[" + graph.getId() + "]"); + } + return node; + } + + public Next findNext(int handlerId) { + ConcurrentHashMap graphNodeIndex = graph.getNodeIndex(); + Node node = graphNodeIndex.get(handlerId); + if (node == null) { + throw new NodeNotFoundException("Can't find node with handlerId=" + + handlerId + + " in graph[" + graph.getId() + "]"); + } + return node.getNext(); + } +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Next.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Next.java index ba8e6c049..31ddba477 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Next.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Next.java @@ -29,14 +29,14 @@ import org.skywalking.apm.collector.core.framework.Executor; */ public class Next implements Executor { - private final List nextNodes; + private final List ways; public Next() { - this.nextNodes = new LinkedList<>(); + this.ways = new LinkedList<>(); } - public final void addNext(Node node) { - nextNodes.add(node); + final void addWay(WayToNode way) { + ways.add(way); } /** @@ -45,6 +45,6 @@ public class Next implements Executor { * @param INPUT */ @Override public void execute(INPUT INPUT) { - nextNodes.forEach(node -> node.execute(INPUT)); + ways.forEach(way -> way.in(INPUT)); } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Node.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Node.java index 39f2c7d7c..e5bda3038 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Node.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/Node.java @@ -36,10 +36,14 @@ public final class Node { } public final Node addNext(NodeProcessor nodeProcessor) { + return this.addNext(new DirectWay(nodeProcessor)); + } + + public final Node addNext(WayToNode way) { synchronized (graph) { - Node node = new Node<>(graph, nodeProcessor); - next.addNext(node); - return node; + way.buildDestination(graph); + next.addWay(way); + return way.getDestination(); } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/PotentialAcyclicGraphException.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/PotentialCyclicGraphException.java similarity index 86% rename from apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/PotentialAcyclicGraphException.java rename to apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/PotentialCyclicGraphException.java index 91d06790f..55a05a13b 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/PotentialAcyclicGraphException.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/PotentialCyclicGraphException.java @@ -21,8 +21,8 @@ package org.skywalking.apm.collector.core.graph; /** * @author wusheng */ -public class PotentialAcyclicGraphException extends RuntimeException { - public PotentialAcyclicGraphException(String message) { +public class PotentialCyclicGraphException extends RuntimeException { + public PotentialCyclicGraphException(String message) { super(message); } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/WayToNode.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/WayToNode.java new file mode 100644 index 000000000..19e30df2c --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/graph/WayToNode.java @@ -0,0 +1,45 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.graph; + +/** + * @author wusheng + */ +public abstract class WayToNode { + private Node destination; + private NodeProcessor destinationHandler; + + public WayToNode(NodeProcessor destinationHandler) { + this.destinationHandler = destinationHandler; + } + + void buildDestination(Graph graph) { + destination = new Node(graph, destinationHandler); + } + + protected abstract void in(INPUT INPUT); + + protected void out(INPUT INPUT) { + destination.execute(INPUT); + } + + Node getDestination() { + return destination; + } +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java new file mode 100644 index 000000000..351339218 --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/BootstrapFlow.java @@ -0,0 +1,125 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.module; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import org.skywalking.apm.collector.core.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author wu-sheng + */ +public class BootstrapFlow { + private final Logger logger = LoggerFactory.getLogger(BootstrapFlow.class); + + private Map loadedModules; + private ApplicationConfiguration applicationConfiguration; + private List startupSequence; + + public BootstrapFlow(Map loadedModules, + ApplicationConfiguration applicationConfiguration) throws CycleDependencyException { + this.loadedModules = loadedModules; + this.applicationConfiguration = applicationConfiguration; + startupSequence = new LinkedList<>(); + + makeSequence(); + } + + void start(ModuleManager moduleManager, + ApplicationConfiguration configuration) throws ProviderNotFoundException, ModuleNotFoundException, ServiceNotProvidedException { + for (ModuleProvider provider : startupSequence) { + String[] requiredModules = provider.requiredModules(); + if (requiredModules != null) { + for (String module : requiredModules) { + if (!moduleManager.has(module)) { + throw new ModuleNotFoundException(module + " is required by " + provider.getModuleName() + + "." + provider.name() + ", but not found."); + } + } + } + logger.info("start the provider {} in {} module.", provider.name(), provider.getModuleName()); + provider.start(configuration.getModuleConfiguration(provider.getModuleName()).getProviderConfiguration(provider.name())); + + provider.requiredCheck(provider.getModule().services()); + } + } + + void notifyAfterCompleted() throws ProviderNotFoundException, ModuleNotFoundException, ServiceNotProvidedException { + for (ModuleProvider provider : startupSequence) { + provider.notifyAfterCompleted(); + } + } + + private void makeSequence() throws CycleDependencyException { + List allProviders = new ArrayList<>(); + loadedModules.forEach((moduleName, module) -> { + module.providers().forEach(provider -> { + allProviders.add(provider); + }); + }); + + while (true) { + int numOfToBeSequenced = allProviders.size(); + for (int i = 0; i < allProviders.size(); i++) { + ModuleProvider provider = allProviders.get(i); + String[] requiredModules = provider.requiredModules(); + if (CollectionUtils.isNotEmpty(requiredModules)) { + boolean isAllRequiredModuleStarted = true; + for (String module : requiredModules) { + // find module in all ready existed startupSequence + boolean exist = false; + for (ModuleProvider moduleProvider : startupSequence) { + if (moduleProvider.getModuleName().equals(module)) { + exist = true; + break; + } + } + if (!exist) { + isAllRequiredModuleStarted = false; + break; + } + } + + if (isAllRequiredModuleStarted) { + startupSequence.add(provider); + allProviders.remove(i); + } + } else { + startupSequence.add(provider); + allProviders.remove(i); + } + } + + if (numOfToBeSequenced == allProviders.size()) { + StringBuilder unsequencedProviders = new StringBuilder(); + allProviders.forEach(provider -> { + unsequencedProviders.append(provider.getModuleName()).append("[provider=").append(provider.getClass().getName()).append("]\n"); + }); + throw new CycleDependencyException("Exist cycle module dependencies in \n" + unsequencedProviders.substring(0, unsequencedProviders.length() - 1)); + } + if (allProviders.size() == 0) { + break; + } + } + } +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/CycleDependencyException.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/CycleDependencyException.java new file mode 100644 index 000000000..ee29641c3 --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/CycleDependencyException.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.core.module; + +/** + * @author wu-sheng + */ +public class CycleDependencyException extends RuntimeException { + public CycleDependencyException(String message) { + super(message); + } +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java index fdc554d0c..b041e4444 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/Module.java @@ -87,45 +87,15 @@ public abstract class Module { } } - void start(ModuleManager moduleManager, - ApplicationConfiguration.ModuleConfiguration configuration) throws ProviderNotFoundException, ModuleNotFoundException, ServiceNotProvidedException { - for (ModuleProvider provider : loadedProviders) { - String[] requiredModules = provider.requiredModules(); - if (requiredModules != null) { - for (String module : requiredModules) { - if (!moduleManager.has(module)) { - throw new ModuleNotFoundException(module + " is required by " + name() + ", but not found."); - } - } - } - logger.info("start the provider {} in {} module.", provider.name(), provider.module().getName()); - provider.start(configuration.getProviderConfiguration(provider.name())); - - provider.requiredCheck(services()); - } - } - - void notifyAfterCompleted() throws ProviderNotFoundException, ModuleNotFoundException, ServiceNotProvidedException { - for (ModuleProvider provider : loadedProviders) { - provider.notifyAfterCompleted(); - } - } - /** * @return providers of this module */ - final List providers() throws ProviderNotFoundException { - if (loadedProviders.size() == 0) { - throw new ProviderNotFoundException(this.name() + " module no provider exists."); - } - + final List providers() { return loadedProviders; } final ModuleProvider provider() throws ProviderNotFoundException, DuplicateProviderException { - if (loadedProviders.size() == 0) { - throw new ProviderNotFoundException(this.name() + " module no provider exists."); - } else if (loadedProviders.size() > 1) { + if (loadedProviders.size() > 1) { throw new DuplicateProviderException(this.name() + " module exist " + loadedProviders.size() + " providers"); } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java index fc78ce3c2..6bf0d4452 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleManager.java @@ -39,7 +39,7 @@ public class ModuleManager { * @param applicationConfiguration */ public void init( - ApplicationConfiguration applicationConfiguration) throws ModuleNotFoundException, ProviderNotFoundException, ServiceNotProvidedException { + ApplicationConfiguration applicationConfiguration) throws ModuleNotFoundException, ProviderNotFoundException, ServiceNotProvidedException, CycleDependencyException { String[] moduleNames = applicationConfiguration.moduleList(); ServiceLoader moduleServiceLoader = ServiceLoader.load(Module.class); LinkedList moduleList = new LinkedList(Arrays.asList(moduleNames)); @@ -65,13 +65,10 @@ public class ModuleManager { throw new ModuleNotFoundException(moduleList.toString() + " missing."); } - for (Module module : loadedModules.values()) { - module.start(this, applicationConfiguration.getModuleConfiguration(module.name())); - } + BootstrapFlow bootstrapFlow = new BootstrapFlow(loadedModules, applicationConfiguration); - for (Module module : loadedModules.values()) { - module.notifyAfterCompleted(); - } + bootstrapFlow.start(this, applicationConfiguration); + bootstrapFlow.notifyAfterCompleted(); } public boolean has(String moduleName) { diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java index 358224105..de48bbe6b 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleProvider.java @@ -133,4 +133,12 @@ public abstract class ModuleProvider { throw new ServiceNotProvidedException("Service " + serviceType.getName() + " should not be provided, based on module define."); } + + Module getModule() { + return module; + } + + String getModuleName() { + return module.name(); + } } diff --git a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java index c78624333..42f8b334f 100644 --- a/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java +++ b/apm-collector/apm-collector-core/src/test/java/org/skywalking/apm/collector/core/graph/GraphManagerTest.java @@ -75,7 +75,7 @@ public class GraphManagerTest { Assert.assertEquals(expected, output); } - @Test(expected = PotentialAcyclicGraphException.class) + @Test(expected = PotentialCyclicGraphException.class) public void testPotentialAcyclicGraph() { Graph testGraph = GraphManager.INSTANCE.createIfAbsent(3, String.class); Node node = testGraph.addNode(new Node1Processor()); @@ -87,7 +87,7 @@ public class GraphManagerTest { Graph graph = GraphManager.INSTANCE.createIfAbsent(4, String.class); graph.addNode(new Node1Processor()).addNext(new Node2Processor()).addNext(new Node4Processor()); - Next next = GraphManager.INSTANCE.findGraph(4).findNext(2); + Next next = GraphManager.INSTANCE.findGraph(4).toFinder().findNext(2); next.execute(123); String output = outputStream.toString(); @@ -102,6 +102,36 @@ public class GraphManagerTest { Graph graph = GraphManager.INSTANCE.createIfAbsent(5, String.class); graph.addNode(new Node1Processor()).addNext(new Node2Processor()).addNext(new Node4Processor()); - Next next = GraphManager.INSTANCE.findGraph(5).findNext(3); + Next next = GraphManager.INSTANCE.findGraph(5).toFinder().findNext(3); + } + + @Test + public void testFindNode() { + Graph graph = GraphManager.INSTANCE.createIfAbsent(6, String.class); + graph.addNode(new Node1Processor()).addNext(new Node2Processor()); + + Node foundNode = GraphManager.INSTANCE.findGraph(6).toFinder().findNode(2, Integer.class); + foundNode.addNext(new Node4Processor()); + } + + @Test + public void testDeadEndWay() { + Graph graph = GraphManager.INSTANCE.createIfAbsent(7, String.class); + graph.addNode(new Node1Processor()).addNext(new WayToNode(new Node2Processor()) { + @Override protected void in(String INPUT) { + //don't call `out(intput)`; + } + }); + + graph.start("Input String"); + String output = outputStream.toString(); + String expected = "Node1 process: s=Input String" + lineSeparator; + + Assert.assertEquals(expected, output); + } + + @After + public void tearDown() { + GraphManager.INSTANCE.reset(); } } diff --git a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml index ae7b41721..e4343a485 100644 --- a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml +++ b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-define/pom.xml @@ -23,11 +23,11 @@ apm-collector-grpc-manager org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-grpc-manager-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml index c22a5b9e3..5d1badf0a 100644 --- a/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml +++ b/apm-collector/apm-collector-grpc-manager/collector-grpc-manager-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-grpc-manager org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-grpc-manager/pom.xml b/apm-collector/apm-collector-grpc-manager/pom.xml index a95546f0b..8464ba827 100644 --- a/apm-collector/apm-collector-grpc-manager/pom.xml +++ b/apm-collector/apm-collector-grpc-manager/pom.xml @@ -23,7 +23,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -46,4 +46,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml index 377ac2ee9..92a63b153 100644 --- a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml +++ b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-define/pom.xml @@ -23,11 +23,11 @@ apm-collector-jetty-manager org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-jetty-manager-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml index 3b490869c..f0ab72eab 100644 --- a/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml +++ b/apm-collector/apm-collector-jetty-manager/collector-jetty-manager-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-jetty-manager org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-jetty-manager/pom.xml b/apm-collector/apm-collector-jetty-manager/pom.xml index b88655834..9bc8c2c17 100644 --- a/apm-collector/apm-collector-jetty-manager/pom.xml +++ b/apm-collector/apm-collector-jetty-manager/pom.xml @@ -23,7 +23,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -46,4 +46,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-naming/collector-naming-define/pom.xml b/apm-collector/apm-collector-naming/collector-naming-define/pom.xml index 0a47a1fc8..b4c4db0be 100644 --- a/apm-collector/apm-collector-naming/collector-naming-define/pom.xml +++ b/apm-collector/apm-collector-naming/collector-naming-define/pom.xml @@ -23,11 +23,11 @@ apm-collector-naming org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-naming-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml b/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml index 4bae8bbce..c2ce80710 100644 --- a/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml +++ b/apm-collector/apm-collector-naming/collector-naming-jetty-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-naming org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -42,4 +42,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-naming/pom.xml b/apm-collector/apm-collector-naming/pom.xml index 32543586b..276a33399 100644 --- a/apm-collector/apm-collector-naming/pom.xml +++ b/apm-collector/apm-collector-naming/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -33,4 +33,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml b/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml index fcb89d4d5..af198cab9 100644 --- a/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml +++ b/apm-collector/apm-collector-queue/collector-queue-datacarrier-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-queue org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-queue/collector-queue-define/pom.xml b/apm-collector/apm-collector-queue/collector-queue-define/pom.xml index 8b6eb29a9..940558138 100644 --- a/apm-collector/apm-collector-queue/collector-queue-define/pom.xml +++ b/apm-collector/apm-collector-queue/collector-queue-define/pom.xml @@ -23,11 +23,11 @@ apm-collector-queue org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-queue-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml b/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml index eac868d49..0e9f488cb 100644 --- a/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml +++ b/apm-collector/apm-collector-queue/collector-queue-disruptor-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-queue org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -42,4 +42,4 @@ 3.3.6 - \ No newline at end of file + diff --git a/apm-collector/apm-collector-queue/pom.xml b/apm-collector/apm-collector-queue/pom.xml index 9f80371ef..7c8f5f184 100644 --- a/apm-collector/apm-collector-queue/pom.xml +++ b/apm-collector/apm-collector-queue/pom.xml @@ -23,7 +23,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-remote/collector-remote-define/pom.xml b/apm-collector/apm-collector-remote/collector-remote-define/pom.xml index a53db7f20..e98e85408 100644 --- a/apm-collector/apm-collector-remote/collector-remote-define/pom.xml +++ b/apm-collector/apm-collector-remote/collector-remote-define/pom.xml @@ -5,11 +5,11 @@ apm-collector-remote org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-remote-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml b/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml index d26da25e1..fea9d5de2 100644 --- a/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml +++ b/apm-collector/apm-collector-remote/collector-remote-grpc-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-remote org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -87,4 +87,4 @@ - \ No newline at end of file + diff --git a/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml b/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml index 975bcd75f..cad87cba8 100644 --- a/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml +++ b/apm-collector/apm-collector-remote/collector-remote-kafka-provider/pom.xml @@ -23,13 +23,14 @@ apm-collector-remote org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-remote-kafka-provider jar +<<<<<<< HEAD org.skywalking @@ -37,4 +38,7 @@ ${project.version} - \ No newline at end of file + +======= + +>>>>>>> 406c4f52d8251eb81aa868ec38f17789e18e0dc0 diff --git a/apm-collector/apm-collector-remote/pom.xml b/apm-collector/apm-collector-remote/pom.xml index 73df4af20..41b000e62 100644 --- a/apm-collector/apm-collector-remote/pom.xml +++ b/apm-collector/apm-collector-remote/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-storage/collector-storage-define/pom.xml b/apm-collector/apm-collector-storage/collector-storage-define/pom.xml index fb49d6be6..795c8d3e9 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/pom.xml +++ b/apm-collector/apm-collector-storage/collector-storage-define/pom.xml @@ -23,10 +23,10 @@ apm-collector-storage org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-storage-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml b/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml index b99ca5d19..ef4dcb10f 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-storage org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml b/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml index a11f6cefb..653d6f6e6 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-storage org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-storage/pom.xml b/apm-collector/apm-collector-storage/pom.xml index 57d4a3c65..a44bded60 100644 --- a/apm-collector/apm-collector-storage/pom.xml +++ b/apm-collector/apm-collector-storage/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-stream/collector-stream-define/pom.xml b/apm-collector/apm-collector-stream/collector-stream-define/pom.xml index d5f63c821..d91106e08 100644 --- a/apm-collector/apm-collector-stream/collector-stream-define/pom.xml +++ b/apm-collector/apm-collector-stream/collector-stream-define/pom.xml @@ -23,10 +23,22 @@ apm-collector-stream org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-stream-define jar - \ No newline at end of file +<<<<<<< HEAD + +======= + + + + org.skywalking + queue-component + ${project.version} + + + +>>>>>>> 406c4f52d8251eb81aa868ec38f17789e18e0dc0 diff --git a/apm-collector/apm-collector-stream/collector-stream-provider/pom.xml b/apm-collector/apm-collector-stream/collector-stream-provider/pom.xml index dab054e56..7d20572e8 100644 --- a/apm-collector/apm-collector-stream/collector-stream-provider/pom.xml +++ b/apm-collector/apm-collector-stream/collector-stream-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-stream org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 @@ -37,4 +37,4 @@ ${project.version} - \ No newline at end of file + diff --git a/apm-collector/apm-collector-stream/pom.xml b/apm-collector/apm-collector-stream/pom.xml index f9b2086da..2544a549e 100644 --- a/apm-collector/apm-collector-stream/pom.xml +++ b/apm-collector/apm-collector-stream/pom.xml @@ -23,7 +23,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-ui/collector-ui-define/pom.xml b/apm-collector/apm-collector-ui/collector-ui-define/pom.xml index d454246e5..8d960eb01 100644 --- a/apm-collector/apm-collector-ui/collector-ui-define/pom.xml +++ b/apm-collector/apm-collector-ui/collector-ui-define/pom.xml @@ -23,11 +23,11 @@ apm-collector-ui org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 collector-ui-define jar - \ No newline at end of file + diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml index db31fc63a..f43a94d97 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/pom.xml @@ -23,7 +23,7 @@ apm-collector-ui org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/apm-collector-ui/pom.xml b/apm-collector/apm-collector-ui/pom.xml index 3d1d30bc4..c8ead2bbc 100644 --- a/apm-collector/apm-collector-ui/pom.xml +++ b/apm-collector/apm-collector-ui/pom.xml @@ -5,7 +5,7 @@ apm-collector org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-collector/pom.xml b/apm-collector/pom.xml index 57515cf6c..048731b38 100644 --- a/apm-collector/pom.xml +++ b/apm-collector/pom.xml @@ -23,7 +23,7 @@ apm org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-commons/apm-datacarrier/pom.xml b/apm-commons/apm-datacarrier/pom.xml index 6d6f64277..795d5758b 100644 --- a/apm-commons/apm-datacarrier/pom.xml +++ b/apm-commons/apm-datacarrier/pom.xml @@ -23,7 +23,7 @@ apm-commons org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-commons/apm-util/pom.xml b/apm-commons/apm-util/pom.xml index 1aa7991b1..3f8d2128f 100644 --- a/apm-commons/apm-util/pom.xml +++ b/apm-commons/apm-util/pom.xml @@ -21,7 +21,7 @@ apm-commons org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-commons/pom.xml b/apm-commons/pom.xml index f9ab71c09..6806bd740 100644 --- a/apm-commons/pom.xml +++ b/apm-commons/pom.xml @@ -21,7 +21,7 @@ apm org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-network/pom.xml b/apm-network/pom.xml index 910c0b44e..a67754da2 100644 --- a/apm-network/pom.xml +++ b/apm-network/pom.xml @@ -23,7 +23,7 @@ apm org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml index 7f821a7ef..5f73e72d1 100644 --- a/apm-sniffer/apm-agent-core/pom.xml +++ b/apm-sniffer/apm-agent-core/pom.xml @@ -23,7 +23,7 @@ org.skywalking apm-sniffer - 3.2.3-2017 + 3.2.4-2017 apm-agent-core diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml index ff3401951..237753c3e 100644 --- a/apm-sniffer/apm-agent/pom.xml +++ b/apm-sniffer/apm-agent/pom.xml @@ -23,7 +23,7 @@ org.skywalking apm-sniffer - 3.2.3-2017 + 3.2.4-2017 apm-agent diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml index b56be37a8..8eee51e49 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml index 9533d9e1d..a467a4458 100644 --- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/pom.xml @@ -23,7 +23,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml index 7b72913a8..d4d18af14 100644 --- a/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/grpc-1.x-plugin/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 apm-grpc-1.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml index 6ff404b59..59acd3f7f 100755 --- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml index c8c35f21a..9f6edf39a 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 apm-httpClient-4.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml index 6b0de0262..6901fc284 100755 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml index 7ece02fd9..434e7e158 100644 --- a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 apm-jedis-2.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml index 6d2e86aa1..e1a66df1d 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml @@ -21,7 +21,7 @@ jetty-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml index 286a71876..83ea38080 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-server-9.x-plugin/pom.xml @@ -21,7 +21,7 @@ jetty-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml index ce646520c..2cb5d3a12 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 jetty-plugins diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml index 1f450bb65..ccb0b097a 100644 --- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/pom.xml @@ -22,7 +22,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 apm-mongodb-3.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml index c2839ad96..8dd26be8f 100644 --- a/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml index eb232bb10..4c3271451 100755 --- a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml index 7bd5eaf24..e3c588569 100644 --- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/http-1.x-plugin/pom.xml @@ -21,7 +21,7 @@ nutz-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml index dd0d16155..91299b622 100644 --- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/mvc-annotation-1.x-plugin/pom.xml @@ -21,7 +21,7 @@ nutz-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml index adcaf9a64..fd56aaa28 100644 --- a/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/nutz-plugins/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 nutz-plugins diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml index e601581a2..7f22cbbec 100644 --- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/pom.xml @@ -23,7 +23,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml index bb2242af6..703ed2bfb 100755 --- a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/pom.xml index bae33b837..8c527c6ed 100644 --- a/apm-sniffer/apm-sdk-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sniffer - 3.2.3-2017 + 3.2.4-2017 apm-sdk-plugin diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml index 1ea9f8a4d..eabff1956 100755 --- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java index 54c8cc485..191d8607b 100644 --- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc3ConnectionInstrumentation.java @@ -41,8 +41,8 @@ import static org.skywalking.apm.plugin.jdbc.define.Constants.ROLLBACK_METHOD_NA import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INTERCEPT_CLASS; /** - * {@link ConnectionInstrumentation} intercept the following methods that the class which extend {@link - * org.postgresql.jdbc.PgConnection}.
+ * {@link Jdbc3ConnectionInstrumentation} intercept the following methods that the class which extend {@link + * org.postgresql.jdbc3.Jdbc3Connection}.
* * 1. Enhance prepareStatement by org.skywalking.apm.plugin.jdbc.define.JDBCPrepareStatementInterceptor * 2. Enhance prepareCall by diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc4ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc4ConnectionInstrumentation.java new file mode 100644 index 000000000..7be5b62f6 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/postgresql/define/Jdbc4ConnectionInstrumentation.java @@ -0,0 +1,124 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.plugin.jdbc.postgresql.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; +import static org.skywalking.apm.plugin.jdbc.define.Constants.CLOSE_METHOD_NAME; +import static org.skywalking.apm.plugin.jdbc.define.Constants.COMMIT_METHOD_NAME; +import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_INTERCEPT_CLASS; +import static org.skywalking.apm.plugin.jdbc.define.Constants.CREATE_STATEMENT_METHOD_NAME; +import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_INTERCEPT_CLASS; +import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_CALL_METHOD_NAME; +import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_INTERCEPT_CLASS; +import static org.skywalking.apm.plugin.jdbc.define.Constants.PREPARE_STATEMENT_METHOD_NAME; +import static org.skywalking.apm.plugin.jdbc.define.Constants.RELEASE_SAVE_POINT_METHOD_NAME; +import static org.skywalking.apm.plugin.jdbc.define.Constants.ROLLBACK_METHOD_NAME; +import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INTERCEPT_CLASS; + +/** + * {@link Jdbc4ConnectionInstrumentation} intercept the following methods that the class which extend {@link + * org.postgresql.jdbc4.Jdbc4Connection}.
+ * + * 1. Enhance prepareStatement by org.skywalking.apm.plugin.jdbc.define.JDBCPrepareStatementInterceptor + * 2. Enhance prepareCall by + * org.skywalking.apm.plugin.jdbc.define.JDBCPrepareCallInterceptor + * 3. Enhance createStatement + * by org.skywalking.apm.plugin.jdbc.define.JDBCStatementInterceptor + * 4. Enhance commit, rollback, close, releaseSavepoint by org.skywalking.apm.plugin.jdbc.define.ConnectionServiceMethodInterceptor + * + * @author zhangxin + */ +public class Jdbc4ConnectionInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { + + public static final String ENHANCE_CLASS = "org.postgresql.jdbc4.Jdbc4Connection"; + + @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[0]; + } + + @Override protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(PREPARE_STATEMENT_METHOD_NAME).and(takesArguments(4)); + } + + @Override public String getMethodsInterceptor() { + return PREPARE_STATEMENT_INTERCEPT_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + }, + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(PREPARE_CALL_METHOD_NAME).and(takesArguments(4)); + } + + @Override public String getMethodsInterceptor() { + return PREPARE_CALL_INTERCEPT_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + }, + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(CREATE_STATEMENT_METHOD_NAME).and(takesArguments(3)); + } + + @Override public String getMethodsInterceptor() { + return CREATE_STATEMENT_INTERCEPT_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + }, + new InstanceMethodsInterceptPoint() { + @Override public ElementMatcher getMethodsMatcher() { + return named(COMMIT_METHOD_NAME).or(named(ROLLBACK_METHOD_NAME)).or(named(CLOSE_METHOD_NAME)).or(named(RELEASE_SAVE_POINT_METHOD_NAME)); + } + + @Override public String getMethodsInterceptor() { + return SERVICE_METHOD_INTERCEPT_CLASS; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override protected ClassMatch enhanceClass() { + return byName(ENHANCE_CLASS); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def index 816cdda10..3fe0ad09b 100644 --- a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def +++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/skywalking-plugin.def @@ -1,3 +1,4 @@ postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.DriverInstrumentation postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.Jdbc3ConnectionInstrumentation +postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.Jdbc4ConnectionInstrumentation postgresql-8.x=org.skywalking.apm.plugin.jdbc.postgresql.define.ConnectionInstrumentation diff --git a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml index 2bfd5c0b4..5b99f2791 100644 --- a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/pom.xml @@ -25,7 +25,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 apm-resin-3.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml index 6df270cad..3311a6af8 100644 --- a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/pom.xml @@ -25,7 +25,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 apm-resin-4.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml index d8d571b87..bad7dd423 100644 --- a/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/sharding-jdbc-1.5.x-plugin/pom.xml @@ -23,7 +23,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml index 3785bc170..9c9933d68 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/concurrent-util-4.x-plugin/pom.xml @@ -21,7 +21,7 @@ spring-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml index 8f93ee445..49d9334e8 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-3.x-plugin/pom.xml @@ -21,7 +21,7 @@ spring-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml index 112e71fcc..60d1068d3 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/pom.xml @@ -21,7 +21,7 @@ spring-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml index 546d3bcb8..5df7c48e4 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 spring-plugins diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml index afa3c51a3..c6bbc5c16 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/pom.xml @@ -21,7 +21,7 @@ spring-plugins org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml index 3ac357acf..46dd4a07f 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/pom.xml @@ -24,7 +24,7 @@ org.skywalking spring-cloud - 3.2.3-2017 + 3.2.4-2017 netflix-plugins diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml index ef0c9bf97..93b9534e0 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/netflix-plugins/spring-cloud-feign-1.x-plugin/pom.xml @@ -24,7 +24,7 @@ org.skywalking netflix-plugins - 3.2.3-2017 + 3.2.4-2017 apm-spring-cloud-feign-1.x-plugin diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml index 612ea5335..0fc2a64ff 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/spring-cloud/pom.xml @@ -24,7 +24,7 @@ org.skywalking spring-plugins - 3.2.3-2017 + 3.2.4-2017 spring-cloud diff --git a/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml index 5d752aba8..28e00faae 100644 --- a/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/spymemcached-2.x-plugin/pom.xml @@ -24,7 +24,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 apm-spymemcached-2.x-plugin @@ -50,4 +50,4 @@ test - \ No newline at end of file + diff --git a/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml index bdf0ede0e..e84b6e2b8 100644 --- a/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/struts2-2.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml index fd1d020a0..e622245d8 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/pom.xml @@ -21,7 +21,7 @@ apm-sdk-plugin org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml index 69a4eea07..af7da6aa6 100644 --- a/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/xmemcached-2.x-plugin/pom.xml @@ -23,7 +23,7 @@ org.skywalking apm-sdk-plugin - 3.2.3-2017 + 3.2.4-2017 apm-xmemcached-2.x-plugin @@ -49,4 +49,4 @@ test - \ No newline at end of file + diff --git a/apm-sniffer/apm-test-tools/pom.xml b/apm-sniffer/apm-test-tools/pom.xml index c722a9803..795b81aaa 100644 --- a/apm-sniffer/apm-test-tools/pom.xml +++ b/apm-sniffer/apm-test-tools/pom.xml @@ -23,7 +23,7 @@ org.skywalking apm-sniffer - 3.2.3-2017 + 3.2.4-2017 apm-test-tools diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml index 06dd41e9f..f4916644a 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/pom.xml @@ -23,7 +23,7 @@ apm-toolkit-activation org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml index 2103c0efd..2209bc95b 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/pom.xml @@ -23,7 +23,7 @@ apm-toolkit-activation org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml index 86b0090b9..e8c83b09a 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/pom.xml @@ -23,7 +23,7 @@ apm-toolkit-activation org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java new file mode 100644 index 000000000..4a99e9066 --- /dev/null +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java @@ -0,0 +1,66 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ +package org.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; +import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.skywalking.apm.agent.core.plugin.match.ClassMatch; + +import static net.bytebuddy.matcher.ElementMatchers.named; +import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName; + +/** + * Support MDC https://logback.qos.ch/manual/mdc.html + * @author: zhangkewei + */ +public class MDCConverterActivation extends ClassInstanceMethodsEnhancePluginDefine { + + @Override + protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return null; + } + + @Override + protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() { + return new InstanceMethodsInterceptPoint[] { + new InstanceMethodsInterceptPoint() { + @Override + public ElementMatcher getMethodsMatcher() { + return named("convertTID"); + } + + @Override + public String getMethodsInterceptor() { + return "org.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc.PrintMDCTraceIdInterceptor"; + } + + @Override public boolean isOverrideArgs() { + return false; + } + } + }; + } + + @Override + protected ClassMatch enhanceClass() { + return byName("org.skywalking.apm.toolkit.log.logback.v1.x.mdc.LogbackMDCPatternConverter"); + } +} diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java new file mode 100644 index 000000000..d052778f3 --- /dev/null +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java @@ -0,0 +1,45 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ +package org.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc; + +import org.skywalking.apm.agent.core.context.ContextManager; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; + +import java.lang.reflect.Method; + +/** + * @author zhangkewei + */ +public class PrintMDCTraceIdInterceptor implements InstanceMethodsAroundInterceptor { + @Override public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { + + } + + @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Object ret) throws Throwable { + return "TID:" + ContextManager.getGlobalTraceId(); + } + + @Override public void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, + Class[] argumentsTypes, Throwable t) { + + } +} \ No newline at end of file diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def index 15839a3e7..e910f4542 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def @@ -1 +1,2 @@ toolkit-logback=org.skywalking.apm.toolkit.activation.log.logback.v1.x.LogbackPatternConverterActivation +toolkit-logback=org.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc.MDCConverterActivation \ No newline at end of file diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml index 9090727ac..ba097971a 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/pom.xml @@ -23,7 +23,7 @@ apm-toolkit-activation org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml index dfd81a1a0..2706980c1 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-trace-activation/pom.xml @@ -23,7 +23,7 @@ apm-toolkit-activation org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/apm-sniffer/apm-toolkit-activation/pom.xml b/apm-sniffer/apm-toolkit-activation/pom.xml index 8cf9d3450..cee26941c 100644 --- a/apm-sniffer/apm-toolkit-activation/pom.xml +++ b/apm-sniffer/apm-toolkit-activation/pom.xml @@ -23,7 +23,7 @@ apm-sniffer org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 pom diff --git a/apm-sniffer/pom.xml b/apm-sniffer/pom.xml index 4680003d6..22fdb6f5d 100644 --- a/apm-sniffer/pom.xml +++ b/apm-sniffer/pom.xml @@ -23,7 +23,7 @@ apm org.skywalking - 3.2.3-2017 + 3.2.4-2017 4.0.0 diff --git a/docker-compose.yml b/docker-compose.yml index b74c96c00..c9c948bbd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '2.1' services: skywalking-webui: - image: skywalking/skywalking-ui:3.2.3-2017 + image: skywalking/skywalking-ui:3.2.4-2017 expose: - "8080" ports: @@ -15,7 +15,7 @@ services: - COLLECTOR_SERVERS=skywalking-collector:10800 skywalking-collector: - image: skywalking/skywalking-collector:3.2.3-2017 + image: skywalking/skywalking-collector:3.2.4-2017 expose: - "10800" - "11800" diff --git a/docs/README_ZH.md b/docs/README_ZH.md index 431170a23..920c225ed 100644 --- a/docs/README_ZH.md +++ b/docs/README_ZH.md @@ -2,7 +2,7 @@ [![EN doc](https://img.shields.io/badge/document-English-blue.svg)](README.md) * [项目简介](/README_ZH.md) - * [快速入门](cn/Quick-start-chn.md) + * [快速入门](cn/Quick-start-CN.md) * [部署单机collector](cn/Deploy-collector-in-standalone-mode-CN.md) * [部署集群collector](cn/Deploy-collector-in-cluster-mode-CN.md) * [部署探针Agent](cn/Deploy-skywalking-agent-CN.md) @@ -10,26 +10,23 @@ * [中间件,框架与类库支持列表](Supported-list.md) * [如何关闭特定插件](cn/How-to-disable-plugin-CN.md) * APM相关介绍资料 - * [APM简介(百度百科)](http://baike.baidu.com/link?url=HizLjnUrwvXqPQ4fZH_MA81MA7R_sE-kpdEIfuUHf-yNHhPiEkA97_7FshVR6raiZL6pvbChTZSIgrC1lY6lhq.md) * [OpenTracing中文版](https://github.com/opentracing-contrib/opentracing-specification-zh.md) - * [JVM内存管理与GC](cn/Memory-Usage-and-GC-info.md) * Application Toolkit,应用程序工具包 - * [概述](cn/sky-walking-application-toolkit-chn.md) - * [OpenTracing Tracer](cn/skywalking-opentracing-chn.md) + * [概述](cn/Application-toolkit-CN.md) + * [OpenTracing Tracer](cn/skywalking-opentracing-CN.md) * 日志组件 - * [log4j组件](cn/sky-walking-application-toolkit-log4j-1.x-chn.md) - * [log4j2组件](cn/sky-walking-application-toolkit-log4j-2.x-chn.md) - * [logback组件](cn/sky-walking-application-toolkit-logback-1.x-chn.md) - * [Trace](cn/sky-walking-application-toolkit-trace-chn.md) + * [log4j组件](cn/Application-toolkit-log4j-1.x-CN.md) + * [log4j2组件](cn/Application-toolkit-log4j-2.x-CN.md) + * [logback组件](cn/Application-toolkit-logback-1.x-CN.md) + * [Trace](cn/Application-toolkit-trace-CN.md) * 测试用例 - * [单插件测试用例](cn/Test-Cases-chn.md) - * [测试应用集群](cn/2.0-Demo-Application-Cluster-chn.md) + * [插件测试](https://github.com/SkywalkingTest/agent-integration-test-report) + * [Java 探针性能测试](https://skywalkingtest.github.io/Agent-Benchmarks/README_zh.html) * 开发指南 - * [工程编译指南](cn/How-to-build.md) - * [插件开发指南](cn/Plugin-Development-Guide.md) + * [工程编译指南](cn/How-to-build-CN.md) + * [插件开发指南](cn/Plugin-Development-Guide-CN.md) * [跨进程追踪上下文传递协议](cn/Skywalking-3-Cross-Process-Propagation-Headers-Protocol-CN.md) - * [探针与Collector间网络协议,v3.2+](cn/How-to-communicate-with-the-collector%3F.md) + * [探针与Collector间网络协议,v3.2+](cn/How-to-communicate-with-the-collector-CN.md) * FAQ - * [探针性能测试报告](https://skywalkingtest.github.io/Agent-Benchmarks/.md) - * [Trace查询有数据,但是没有拓扑图和JVM数据?](cn/Trace%E6%9F%A5%E8%AF%A2%E6%9C%89%E6%95%B0%E6%8D%AE%EF%BC%8C%E4%BD%86%E6%98%AF%E6%B2%A1%E6%9C%89%E6%8B%93%E6%89%91%E5%9B%BE%E5%92%8CJVM%E6%95%B0%E6%8D%AE.md) - * [加载探针,Console被GRPC日志刷屏](cn/加载探针,Console被GRPC日志刷屏.md) \ No newline at end of file + * [Trace查询有数据,但是没有拓扑图和JVM数据?](cn/FAQ/Why-have-traces-no-others-CN.md) + * [加载探针,Console被GRPC日志刷屏](cn/FAQ/Too-many-gRPC-logs-CN.md) \ No newline at end of file diff --git a/docs/cn/Application-toolkit-CN.md b/docs/cn/Application-toolkit-CN.md new file mode 100644 index 000000000..ca0a0b0ec --- /dev/null +++ b/docs/cn/Application-toolkit-CN.md @@ -0,0 +1,11 @@ +# 什么是sky-walking应用程序工具包? +Sky-walking应用程序工具包是一系列的类库,有skywalking团队提供。通过这些类库,你可以在你的应用程序内,访问sky-walking的一些内部信息. + +_**最为重要的是**_, 即使你移除skywalking的探针,或者不激活探针,这些类库也不会对应用程序有任何影响,也不会影响性能. + +工具包提供以下核心能力 +1. 将追踪信息和log组件集成,如log4j, log4j2 和 logback +1. 兼容CNCF OpenTracing标准的手动埋点 +1. 使用Skywalking专有的标注和交互性API + +_**注意**: 所有的应用程序工具包都托管在bitray.com/jcenter. 同时请确保你使用的开发工具包和skywalking的agent探针版本一致._ \ No newline at end of file diff --git a/docs/cn/Application-toolkit-log4j-1.x-CN.md b/docs/cn/Application-toolkit-log4j-1.x-CN.md new file mode 100644 index 000000000..46fe79153 --- /dev/null +++ b/docs/cn/Application-toolkit-log4j-1.x-CN.md @@ -0,0 +1,21 @@ +* 使用 maven 和 gradle 依赖相应的工具包 +```xml + + org.skywalking + apm-toolkit-log4j-1.x + {project.release.version} + +``` +   [ ![Download](https://api.bintray.com/packages/wu-sheng/skywalking/org.skywalking.apm-toolkit-log4j-1.x/images/download.svg) ](https://bintray.com/wu-sheng/skywalking/org.skywalking.apm-toolkit-log4j-1.x/_latestVersion) + +* 配置layout +```properties +log4j.appender.CONSOLE.layout=org.skywalking.apm.toolkit.log.log4j.v1.x.TraceIdPatternLayout +``` + +* 在`layout.ConversionPattern`中设置 `%T`来展示traceid ( 在 2.0-2016版本中, 你应该设置为 %x, [为什么改变配置,请参考相关issue?](https://github.com/wu-sheng/sky-walking/issues/77) ) +```properties +log4j.appender.CONSOLE.layout.ConversionPattern=%d [%T] %-5p %c{1}:%L - %m%n +``` + +* 当你使用`-javaagent`参数激活sky-walking的探针, 如果当前上下文中存在traceid,log4j将在输出**traceId**。如果探针没有被激活,将输出`TID: N/A`. \ No newline at end of file diff --git a/docs/cn/Application-toolkit-log4j-2.x-CN.md b/docs/cn/Application-toolkit-log4j-2.x-CN.md new file mode 100644 index 000000000..593a1dfda --- /dev/null +++ b/docs/cn/Application-toolkit-log4j-2.x-CN.md @@ -0,0 +1,19 @@ +* 使用 maven 和 gradle 依赖相应的工具包 +```xml + + org.skywalking + apm-toolkit-log4j-2.x + {project.release.version} + +``` +   [ ![Download](https://api.bintray.com/packages/wu-sheng/skywalking/org.skywalking.apm-toolkit-log4j-2.x/images/download.svg) ](https://bintray.com/wu-sheng/skywalking/org.skywalking.apm-toolkit-log4j-2.x/_latestVersion) + +* 在log4j2.xml中的pattern 配置节,配置`[%traceId]` +```xml + + + + + +``` +* 当你使用`-javaagent`参数激活sky-walking的探针, 如果当前上下文中存在traceid,log4j2将在输出**traceId**。如果探针没有被激活,将输出`TID: N/A`. \ No newline at end of file diff --git a/docs/cn/Application-toolkit-logback-1.x-CN.md b/docs/cn/Application-toolkit-logback-1.x-CN.md new file mode 100644 index 000000000..ab102a25e --- /dev/null +++ b/docs/cn/Application-toolkit-logback-1.x-CN.md @@ -0,0 +1,22 @@ +* 使用 maven 和 gradle 依赖相应的工具包 +```xml + + org.skywalking + apm-toolkit-logback-1.x + {project.release.version} + +``` +   [ ![Download](https://api.bintray.com/packages/wu-sheng/skywalking/org.skywalking.apm-toolkit-log4j-2.x/images/download.svg) ](https://bintray.com/wu-sheng/skywalking/org.skywalking.apm-toolkit-log4j-2.x/_latestVersion) + +* 在logback.xml中的`Pattern`配制节中,设置`%tid` +```xml + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n + + + +``` + +* 当你使用`-javaagent`参数激活sky-walking的探针, 如果当前上下文中存在traceid,logback将在输出**traceId**。如果探针没有被激活,将输出`TID: N/A`. \ No newline at end of file diff --git a/docs/cn/Application-toolkit-trace-CN.md b/docs/cn/Application-toolkit-trace-CN.md new file mode 100644 index 000000000..fbefb1ba6 --- /dev/null +++ b/docs/cn/Application-toolkit-trace-CN.md @@ -0,0 +1,20 @@ +* 使用 maven 和 gradle 依赖相应的工具包 +```xml + + org.skywalking + apm-toolkit-trace + ${skywalking.version} + +``` +   [ ![Download](https://api.bintray.com/packages/wu-sheng/skywalking/org.skywalking.apm-toolkit-trace/images/download.svg) ](https://bintray.com/wu-sheng/skywalking/org.skywalking.apm-toolkit-trace/_latestVersion) + +* 随时使用 `TraceContext.traceId()` API,在应用程序的任何地方获取traceId. +```java +import org.skywalking.apm.toolkit.trace.TraceContext; +... + +modelAndView.addObject("traceId", TraceContext.traceId()); +``` +_示例代码,仅供参考_ + +* 对任何需要追踪的方法,使用@Trace标注,则此方法会被加入到追踪链中。 \ No newline at end of file diff --git a/docs/cn/Deploy-skywalking-agent-CN.md b/docs/cn/Deploy-skywalking-agent-CN.md index dcaef5464..d95db9c7a 100644 --- a/docs/cn/Deploy-skywalking-agent-CN.md +++ b/docs/cn/Deploy-skywalking-agent-CN.md @@ -1,11 +1,11 @@ -## Download skywalking agent release version -- Go to [release page](https://github.com/OpenSkwaylking/skywalking/releases) +## 下载skywalking探针发布版本 +- 前向[发布页面](https://github.com/OpenSkywalking/skywalking/releases) -## Deploy skywalking javaagent -1. Copy the agent package to anywhere you like. The logs, plugins and config are all included in the package. -2. Add -javaagent:/path/to/skywalking-agent/skywalking-agent.jar to VM argument. +## 部署探针 +1. 拷贝skywalking-agent目录到所需位置,探针包含整个目录,请不要改变目录结构 +1. 增加JVM启动参数,`-javaagent:/path/to/skywalking-agent/skywalking-agent.jar`。参数值为skywalking-agent.jar的绝对路径。 -New agent package looks like this: +新目录结构如下: ``` +-- skywalking-agent +-- activations @@ -23,24 +23,57 @@ New agent package looks like this: skywalking-agent.jar ``` -- Start your application。 +- `/config/agent.config`包含探针所需配置,中文说明如下。 -# Advanced features -- All plugins are in `/plugin` folder. The plugin jar is active when it is in there. Remove the plugin jar, it disabled. -- Besides set config through `/config/agent.config`, you can use System.Env and System.Properties(-D) to set config. - - Key of env and properties = `skywalking.` + key in `agent.config` file - - Priority: System.Env > System.Properties(-D) > `/config/agent.config` -- The default logging output folder is `/log`. +```properties +# 当前的应用编码,最终会显示在webui上。 +# 建议一个应用的多个实例,使用有相同的application_code。请使用英文 +agent.application_code=Your_ApplicationName -# Deploy agent in Tomcat FAQ +# 每三秒采样的Trace数量 +# 默认为负数,代表在保证不超过内存Buffer区的前提下,采集所有的Trace +# agent.sample_n_per_3_secs=-1 + +# 设置需要忽略的请求地址 +# 默认配置如下 +# agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg + +# 对应Collector的config/application.yml配置文件中 agent_server/jetty/port 配置内容 +# 例如: +# 单节点配置:SERVERS="127.0.0.1:8080" +# 集群配置:SERVERS="10.2.45.126:8080,10.2.45.127:7600" +collector.servers=127.0.0.1:10800 + +# 日志文件名称前缀 +logging.file_name=skywalking-agent.log + +# 日志文件最大大小 +# 如果超过此大小,则会生成新文件。 +# 默认为300M +logging.max_file_size=314572800 + +# 日志级别,默认为DEBUG。 +logging.level=DEBUG +``` + +- 启动被监控应用。 + +# 高级特性 +- 插件会被统一放置在`plugins`目录中,新的插件,也只需要在启动阶段,放在目录中,就自动生效。删除则失效。 +- 配置除了通过`/config/agent.config`文件外,可以通过环境变量和VM参数(-D)来进行设置 + - 参数的key = `skywalking.` + `agent.config`文件中的key + - 优先级:系统环境变量 > VM参数(-D) > `/config/agent.config`中的配置 +- Log默认使用文件输出,输出到`/log`目录中 + +# Tomcat配置探针FAQ - Tomcat 7 -Change the first line of `tomcat/bin/catalina.sh`. +修改`tomcat/bin/catalina.sh`,在首行加入如下信息 ```shell CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS ``` - Tomcat 8 -Change the first line of `tomcat/bin/catalina.sh`. +修改`tomcat/bin/catalina.sh`,在首行加入如下信息 ```shell -set "CATALINA_OPTS=... -javaagent:E:\apache-tomcat-8.5.20\skywalking-agent\skywalking-agent.jar -Dconfig=\skywalking\config\dir" +set "CATALINA_OPTS=... -javaagent:E:\apache-tomcat-8.5.20\skywalking-agent\skywalking-agent.jar" ``` \ No newline at end of file diff --git a/docs/cn/FAQ/Too-many-gRPC-logs-CN.md b/docs/cn/FAQ/Too-many-gRPC-logs-CN.md new file mode 100644 index 000000000..8a192cdae --- /dev/null +++ b/docs/cn/FAQ/Too-many-gRPC-logs-CN.md @@ -0,0 +1,7 @@ +**现象**: +1. 加载探针并启动应用 +2. Console中被GRPC日志刷屏 + +**原因**:Skywalking采用了GRPC框架发送数据,GRPC框架读取log的配置文件进行日志输出。 + +**解决方法**: 在log的配置文件中添加对`org.skywalking.apm.dependencies`包的过滤 diff --git a/docs/cn/FAQ/Why-have-traces-no-others-CN.md b/docs/cn/FAQ/Why-have-traces-no-others-CN.md new file mode 100644 index 000000000..fcab017a3 --- /dev/null +++ b/docs/cn/FAQ/Why-have-traces-no-others-CN.md @@ -0,0 +1,11 @@ +现象: +- Agent和Collector正常工作,没有异常日志 +- 已经对系统进行过访问,Trace查询有数据 +- UI除Trace查询页面外,其他页面无数据 +- **页面顶部时间轴和当前系统时间不一致** + +原因: +被监控系统所在的操作系统,未设置为当前时区,导致统计数据汇集时间点偏差。 + +解决方法: +设置操作系统时间时区 \ No newline at end of file diff --git a/docs/cn/How-to-build-CN.md b/docs/cn/How-to-build-CN.md new file mode 100644 index 000000000..baeeae5cb --- /dev/null +++ b/docs/cn/How-to-build-CN.md @@ -0,0 +1,18 @@ +## 工程编译指南 +本文档用于指导开发者,在本地开发环境中编译工程。 + +### 前言 +因为工程结构和代码依赖会随版本变化,如果读者熟悉travis-ci,则可直接参考[.travis.yml](https://github.com/wu-sheng/sky-walking/blob/master/.travis.yml) + +### 编译步骤 +1. 准备环境,jdk8,Maven +1. 执行`mvn clean package` + +### 在IntelliJ IDEA中编译工程 +上述步骤在命令行中,能够很好的编译工程,但导入到编译器中的工程依然会有一些报错,我们需要进行几步简单的操作。 +1. 在IntelliJ Terminal中,执行`mvn compile -Dmaven.test.skip=true`进行编译 +1. 设置gRPC的自动生成代码目录,为源码目录 + - **apm-network/target/generated--sources/protobuf**目录下的`grpc-java`和`java`目录 + - **apm-collector/apm-collector-stream/target/protobuf**目录下的`grpc-java`和`java`目录 + +注:从3.2开始,网络通讯协议引入GRPC,所以增加上述的步骤 diff --git a/docs/cn/How-to-communicate-with-the-collector-CN.md b/docs/cn/How-to-communicate-with-the-collector-CN.md new file mode 100644 index 000000000..be60332c3 --- /dev/null +++ b/docs/cn/How-to-communicate-with-the-collector-CN.md @@ -0,0 +1,352 @@ +# 探针与Collector间通讯协议 +## 前言 +这篇文章主要介绍3.2版本的Collector对外提供的服务协议。一般情况下,使用者和开发者都无需了解此协议细节。但是在庞大的开源生态中,我们已经收到过多次有公司或个人的使用案例,使用自己的非Java探针(PHP,GO等)探针,接入我们的Collector进行数据分析和监控。 + +## 协议类型 +Collector从3.2开始,对外同时提供gRPC和HTTP RESTFul两种类型的协议。从效率上,我们推荐使用gRPC + +# gRPC服务 +本章节,描述官方java探针使用的网络协议 + +## Collector服务发现协议 +### 简介 +**Collector服务发现协议是探针启动时,第一个调用的服务。**通过服务,查找对应的gRPC服务地址与端口列表,并在由客户端选择其中任意一个作为服务端。此服务需周期性调用,确保探针本地的服务端口列表是准确有效的。 + +### 协议类型 +HTTP GET + +### 协议内容 +- 请求 +GET操作:http://collectorIp:port/agentstream/grpc 。 其中`/agentstream/grpc`是默认值,如需修改,需要参考collector相关配置。 + +- 返回 +JSON数组,数组的每个元素,为一个有效的gRPC服务地址。 +```json +["ip address1:port1","ip address2:port2","ip address3:port3"] +``` + +## 应用注册服务 +### 简介 +应用注册服务,是将手动设计的applicationCode,以及ip:port沟通的服务地址,转换成数字的服务。此服务会在后续的传输过程中,有效降低网络带宽需求。 + +### 协议类型 +gRPC服务 + +### 协议内容 +https://github.com/OpenSkywalking/skywalking/blob/master/apm-network/src/main/proto/ApplicationRegisterService.proto +```proto +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "org.skywalking.apm.network.proto"; + +import "KeyWithIntegerValue.proto"; + +//register service for ApplicationCode, this service is called when service starts. +service ApplicationRegisterService { + rpc register (Application) returns (ApplicationMapping) { + } +} + +message Application { + repeated string applicationCode = 1; +} + +message ApplicationMapping { + repeated KeyWithIntegerValue application = 1; +} +``` +- 首次调用时,applicationCode为客户端设置的应用名(显示在拓扑图和应用列表上的名字)。之后随着追踪过程,会上报此应用相关的周边服务的`ip:port`地址列表 +- KeyWithIntegerValue 返回,key为上报的applicationCode和ip:port地址,value为对应的id。applicationCode对应的返回id,在后续协议中,被称为applicationId。 +- 此服务按需调用,本地无法找到ip:port对应的id时,可异步发起调用。 +- 获取applicationId的操作是必选。 +- 获取ip:port对应的id是可选,但是完成id设置,会有效提高collector处理效率,降低网络消耗。 + + +## 应用实例发现服务 +### 简介 +应用实例发现服务存在三个子服务,分别是实例注册服务,实例心跳服务,实例注册重连服务。这三个服务负责获取和保持应用实例在线的功能。 + +### 协议类型 +gRPC服务 + +### 实例注册服务 +https://github.com/OpenSkywalking/skywalking/blob/master/apm-network/src/main/proto/DiscoveryService.proto#L11-L12 +```proto +service InstanceDiscoveryService { + rpc register (ApplicationInstance) returns (ApplicationInstanceMapping) { + } +} + +message ApplicationInstance { + int32 applicationId = 1; + string agentUUID = 2; + int64 registerTime = 3; + OSInfo osinfo = 4; +} + +message OSInfo { + string osName = 1; + string hostname = 2; + int32 processNo = 3; + repeated string ipv4s = 4; +} + +message ApplicationInstanceMapping { + int32 applicationId = 1; + int32 applicationInstanceId = 2; +} +``` +- agentUUID 由探针生成,需保持唯一性,推荐使用UUID算法。并在应用重启前保持不变 +- applicationId 由**应用注册服务**获取。 +- 服务端返回应用实例id,applicationInstanceId 。后续上报服务使用实例id标识。 + +### 实例心跳服务 +https://github.com/OpenSkywalking/skywalking/blob/master/apm-network/src/main/proto/DiscoveryService.proto#L14-L15 +```proto +service InstanceDiscoveryService { + rpc heartbeat (ApplicationInstanceHeartbeat) returns (Downstream) { + } +} + +message ApplicationInstanceHeartbeat { + int32 applicationInstanceId = 1; + int64 heartbeatTime = 2; +} +``` +- 心跳服务每分钟上报一次。 +- 如一分钟内有segment数据上报,则可不必上报心跳。 + +### 实例注册重连服务 +https://github.com/OpenSkywalking/skywalking/blob/master/apm-network/src/main/proto/DiscoveryService.proto#L17-L18 +```proto +service InstanceDiscoveryService { + rpc registerRecover (ApplicationInstanceRecover) returns (Downstream) { + } +} + +message ApplicationInstanceRecover { + int32 applicationId = 1; + int32 applicationInstanceId = 2; + int64 registerTime = 3; + OSInfo osinfo = 4; +} +``` +- 应用重连服务于**应用注册服务**类似,在gRPC发生重连,并再次连接成功后发送。需包含通过**应用注册服务**获取的applicationInstanceId。 + +## 服务名注册发现服务 +### 简介 +服务名注册发现服务,是将应用内的服务名(operationName)替换为id的服务。 + +### 协议类型 +gRPC服务 + +### 协议内容 +https://github.com/OpenSkywalking/skywalking/blob/master/apm-network/src/main/proto/DiscoveryService.proto#L53-L74 +```proto +//discovery service for ServiceName by Network address or application code +service ServiceNameDiscoveryService { + rpc discovery (ServiceNameCollection) returns (ServiceNameMappingCollection) { + } +} + +message ServiceNameCollection { + repeated ServiceNameElement elements = 1; +} + +message ServiceNameMappingCollection { + repeated ServiceNameMappingElement elements = 1; +} + +message ServiceNameMappingElement { + int32 serviceId = 1; + ServiceNameElement element = 2; +} + +message ServiceNameElement { + string serviceName = 1; + int32 applicationId = 2; +} +``` +- 可选服务,可有效降低网络消耗,推荐实现。注意,由于部分应用存在URI中夹带参数的情况,请注意限制探针内的缓存容量,防止内存溢出。 +- ServiceNameElement中,applicationId为当前applicationCode对应的id。serviceName一般为对应span的operationName + +## JVM指标上报服务 +### 简介 +上报当前实例的JVM信息,每秒上报一次。 + +### 协议类型 +gRPC服务 + +### 协议内容 +https://github.com/OpenSkywalking/skywalking/blob/master/apm-network/src/main/proto/JVMMetricsService.proto +```proto +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "org.skywalking.apm.network.proto"; + +import "Downstream.proto"; + +service JVMMetricsService { + rpc collect (JVMMetrics) returns (Downstream) { + } +} + +message JVMMetrics { + repeated JVMMetric metrics = 1; + int64 applicationInstanceId = 2; +} + +message JVMMetric { + int64 time = 1; + CPU cpu = 2; + repeated Memory memory = 3; + repeated MemoryPool memoryPool = 4; + repeated GC gc = 5; +} + +message CPU { + double usagePercent = 2; +} + +message Memory { + bool isHeap = 1; + int64 init = 2; + int64 max = 3; + int64 used = 4; + int64 committed = 5; +} + +message MemoryPool { + PoolType type = 1; + bool isHeap = 2; + int64 init = 3; + int64 max = 4; + int64 used = 5; + int64 commited = 6; +} + +enum PoolType { + CODE_CACHE_USAGE = 0; + NEWGEN_USAGE = 1; + OLDGEN_USAGE = 2; + SURVIVOR_USAGE = 3; + PERMGEN_USAGE = 4; + METASPACE_USAGE = 5; +} + +message GC { + GCPhrase phrase = 1; + int64 count = 2; + int64 time = 3; +} + +enum GCPhrase { + NEW = 0; + OLD = 1; +} +``` + +## TraceSegment上报服务 +### 简介 +上报调用链信息 + +### 协议类型 +gRPC服务 + +### 协议内容 +```proto +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "org.skywalking.apm.network.proto"; + +import "Downstream.proto"; +import "KeyWithStringValue.proto"; + +service TraceSegmentService { + rpc collect (stream UpstreamSegment) returns (Downstream) { + } +} + +message UpstreamSegment { + repeated UniqueId globalTraceIds = 1; + bytes segment = 2; // the byte array of TraceSegmentObject +} + +message UniqueId { + repeated int64 idParts = 1; +} + +message TraceSegmentObject { + UniqueId traceSegmentId = 1; + repeated TraceSegmentReference refs = 2; + repeated SpanObject spans = 3; + int32 applicationId = 4; + int32 applicationInstanceId = 5; +} + +message TraceSegmentReference { + RefType refType = 1; + UniqueId parentTraceSegmentId = 2; + int32 parentSpanId = 3; + int32 parentApplicationInstanceId = 4; + string networkAddress = 5; + int32 networkAddressId = 6; + string entryServiceName = 7; + int32 entryServiceId = 8; + string parentServiceName = 9; + int32 parentServiceId = 10; +} + +message SpanObject { + int32 spanId = 1; + int32 parentSpanId = 2; + int64 startTime = 3; + int64 endTime = 4; + int32 operationNameId = 5; + string operationName = 6; + int32 peerId = 7; + string peer = 8; + SpanType spanType = 9; + SpanLayer spanLayer = 10; + int32 componentId = 11; + string component = 12; + bool isError = 13; + repeated KeyWithStringValue tags = 14; + repeated LogMessage logs = 15; +} + +enum RefType { + CrossProcess = 0; + CrossThread = 1; +} + +enum SpanType { + Entry = 0; + Exit = 1; + Local = 2; +} + +enum SpanLayer { + Database = 0; + RPCFramework = 1; + Http = 2; + MQ = 3; +} + +message LogMessage { + int64 time = 1; + repeated KeyWithStringValue data = 2; +} +``` +- UniqueId为segment或者globalTraceId的数字表示。由3个long组成,1)applicationInstanceId,2)当前线程id,3)当前时间戳*10000 + seq(0-10000自循环) +- Span的数据,请参考[插件开发规范](https://github.com/OpenSkywalking/skywalking/wiki/Plugin-Development-Guide) +- 以下id和名称根据注册返回结果,优先上报id,无法获取id时,再上传name。参考之前的应用和服务注册章节。 + - operationNameId/operationName + - networkAddress/networkAddressId + - entryServiceName/entryServiceId + - parentServiceName/parentServiceId + - peerId/peer +- componentId为默认支持的插件id,非官方支持,需传输名称或修改服务端源代码。[官方组件列表](https://github.com/OpenSkywalking/skywalking/blob/master/apm-network/src/main/java/org/skywalking/apm/network/trace/component/ComponentsDefine.java) diff --git a/docs/cn/Plugin-Development-Guide-CN.md b/docs/cn/Plugin-Development-Guide-CN.md new file mode 100644 index 000000000..63bede5d7 --- /dev/null +++ b/docs/cn/Plugin-Development-Guide-CN.md @@ -0,0 +1,276 @@ +## 插件开发指南 +本文档描述 [v3.2+](https://github.com/OpenTracing/skywalking/releases) 插件开发方法、使用的API,以及注意事项。3.2版本将在2017 CNUTCon之前发布。 + +### 核心概念 +#### 一. Span +Span是追踪系统中的通用概念(有时候被翻译成埋点),关于Span的定义,请参考[OpenTracing 中文版](https://github.com/opentracing-contrib/opentracing-specification-zh/blob/master/specification.md#opentracing数据模型)。 +sky-walking作为OpenTracing的支持者,在核心实现中,与标准有较高的相似度。 + +我们将span分为三类: + +1.1 EntrySpan +EntrySpan代表一个服务的提供方,即,服务端的入口点。它是每个Java对外服务的入口点。如:Web服务入口就是一个EntrySpan。 + +1.2 LocalSpan +LocalSpan代表一个普通的Span,代表任意一个本地逻辑块(或方法) + +1.3 ExitSpan +ExitSpan也可以称为LeafSpan(sky-walking的早期版本中的称呼),代表了一个远程服务的客户端调用。如:一次JDBC调用。 + +#### 二. ContextCarrier +分布式追踪要解决的一个重要问题,就是跨进程的问题,ContextCarrier的概念就是为了解决这种场景。 + +当发生一次**A->B**的网络调用时: +1. 需要在客户端生成(inject操作)ContextCarrier,并序列化成String +1. 将这个String加入RPC调用的正文(或HEAD)中,传递到服务端 +1. 服务端收到后,转换为新的ContextCarrier +1. 通过提取操作(extract操作)建立关联 + +以HTTPComponent调用Tomcat为例: +1. 客户端(HTTPComponent端) +```java + span = ContextManager.createExitSpan("/span/operation/name", contextCarrier, "ip:port"); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + //向HTTP或者其他RPC HEAD中设置上下文 + heads.put(next.getHeadKey(), next.getHeadValue()); + } +``` + +2. 服务端(Tomcat端) +```java + ContextCarrier contextCarrier = new ContextCarrier(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + //从HTTP或者其他RPC HEAD中,根据指定的KEY,提取上下文 + next.setHeadValue(heads.get(next.getHeadKey())); + } + + span = ContextManager.createEntrySpan(“/span/operation/name”, contextCarrier); +``` + +#### 三. ContextSnapshot +除了跨进程的RPC调用,另外一种追踪的常见场景是跨线程。跨线程和跨进程有很高的相似度,都是需要完成上下文的传递工作。所以ContextSnapshot具有和ContextCarrier十分类似的API风格。 + +当发生一次**A->B**的跨线程调用时: +1. 需要在A线程中通过ContextManager#capture操作生成ContextSnapshot对象实例 +1. 将这个ContextSnapshot对象传递到B线程中 +1. B线程通过ContextManager#continued操作完成上下文传递 + +### 核心API +#### 一. ContextManager +ContextManager提供了追踪相关操作的主入口 + +1. 创建EntrySpan +```java +public static AbstractSpan createEntrySpan(String operationName, ContextCarrier carrier) +``` +通过服务名、跨进程传递的ContextCarrier,创建EntrySpan。 + +2. 创建LocalSpan +```java +public static AbstractSpan createLocalSpan(String operationName) +``` +根据服务名(或方法名),创建LocalSpan + +3. 创建ExitSpan +```java +public static AbstractSpan createExitSpan(String operationName, ContextCarrier carrier, String remotePeer) +``` +根据服务名,跨进程传递的ContextCarrier(空容器)和远端服务地址(IP、主机名、域名 + 端口),创建ExitSpan + +#### 二. AbstractSpan +AbstractSpan提供了Span内部,进行操作的各项API + +```java + /** + * Set the component id, which defines in {@link org.skywalking.apm.network.trace.component.ComponentsDefine} + * + * @param component + * @return the span for chaining. + */ + AbstractSpan setComponent(Component component); + + /** + * Only use this method in explicit instrumentation, like opentracing-skywalking-bridge. + * It it higher recommend don't use this for performance consideration. + * + * @param componentName + * @return the span for chaining. + */ + AbstractSpan setComponent(String componentName); + + AbstractSpan setLayer(SpanLayer layer); + + /** + * Set a key:value tag on the Span. + * + * @return this Span instance, for chaining + */ + AbstractSpan tag(String key, String value); + + /** + * Record an exception event of the current walltime timestamp. + * + * @param t any subclass of {@link Throwable}, which occurs in this span. + * @return the Span, for chaining + */ + AbstractSpan log(Throwable t); + + AbstractSpan errorOccurred(); + + /** + * Record an event at a specific timestamp. + * + * @param timestamp The explicit timestamp for the log record. + * @param event the events + * @return the Span, for chaining + */ + AbstractSpan log(long timestamp, Map event); + + /** + * Sets the string name for the logical operation this span represents. + * + * @return this Span instance, for chaining + */ + AbstractSpan setOperationName(String operationName); +``` +Span的操作语义和OpenTracing类似。 + +SpanLayer为我们的特有概念,如果是远程调用类的服务,请设置此属性,包括4个属性值 +1. DB +1. RPC_FRAMEWORK,非HTTP类型的RPC框架,如:原生的DUBBO,MOTAN +1. HTTP +1. MQ + +### 开发插件 +#### 一. 简介 +因为所有的程序调用都是基于方法的,所以插件实际上就是基于方法的拦截,类似面向切面编程的AOP技术。sky-walking底层已经完成相关的技术封装,所以插件开发者只需要定位需要拦截的类、方法,然后结合上文中的追踪API,即可完成插件的开发。 + +#### 二. 拦截类型 +根据Java方法,共有三种拦截类型 +1. 拦截构造函数 +1. 拦截实例方法 +1. 拦截静态方法 + +我们将这三类拦截,分为两类,即: +1. 实例方法增强插件,继承ClassInstanceMethodsEnhancePluginDefine +1. 静态方法增强插件,继承ClassStaticMethodsEnhancePluginDefine + +当然,也可以同时支持实例和静态方法,直接继承ClassEnhancePluginDefine。但是,这种情况很少。 + +#### 三. 实现自己的插件定义 +我们以继承ClassInstanceMethodsEnhancePluginDefine为例(ClassStaticMethodsEnhancePluginDefine十分类似,不再重复描述),描述定义插件的全过程 + +1. 定义目标类名称 +```java +protected abstract ClassMatch enhanceClass(); +``` + +ClassMatch反应类的匹配方式,目前提供三种: + +* byName, 通过类名完整匹配 +* byClassAnnotationMatch, 通过类标注进行匹配 +* byMethodAnnotationMatch, 通过方法的标注来匹配类 +* byHierarchyMatch, 通过父类或者接口匹配 + +注意实现: +* 所有类、接口、标注名称,请使用字符串,不要使用`*.class.getName()`(用户环境可能会引起ClassLoader问题)。 +* by*AnnotationMatch不支持继承的标注 +* byHierarchyMatch,如果存在接口、抽象类、类间的多层继承关系,如果方法复写,则可能造成多层埋点。 + +如: +```java +@Override +protected ClassMatch enhanceClassName() { + return byName("org.apache.catalina.core.StandardEngineValve"); +} + +``` + +2. 定义构造函数拦截点 +```java +protected InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints(); + +public interface InstanceMethodsInterceptPoint { + /** + * class instance methods matcher. + * + * @return methods matcher + */ + ElementMatcher getMethodsMatcher(); + + /** + * @return represents a class name, the class instance must instanceof InstanceMethodsAroundInterceptor. + */ + String getMethodsInterceptor(); + + boolean isOverrideArgs(); +} +``` + +返回拦截方法的匹配器,以及对应的拦截类,同样由于潜在的ClassLoader问题,不要使用`*.class.getName()`。如何构建拦截器,请章节"四. 实现拦截器逻辑"。 + +3. 定义skywalking-plugin.def文件 +```properties +tomcat-7.x/8.x=org.skywalking.apm.plugin.tomcat78x.define.TomcatInstrumentation +``` + +* 插件名称,要求全局唯一,命名规范:目标组件+版本号 +* 插件定义类全名 + +#### 四. 实现拦截器逻辑 +我们继续以实现实例方法拦截为例,拦截器需要实现org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor。 +```java +/** + * A interceptor, which intercept method's invocation. The target methods will be defined in {@link + * ClassEnhancePluginDefine}'s subclass, most likely in {@link ClassInstanceMethodsEnhancePluginDefine} + * + * @author wusheng + */ +public interface InstanceMethodsAroundInterceptor { + /** + * called before target method invocation. + * + * @param result change this result, if you want to truncate the method. + * @throws Throwable + */ + void beforeMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + MethodInterceptResult result) throws Throwable; + + /** + * called after target method invocation. Even method's invocation triggers an exception. + * + * @param ret the method's original return value. + * @return the method's actual return value. + * @throws Throwable + */ + Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + Object ret) throws Throwable; + + /** + * called when occur exception. + * + * @param t the exception occur. + */ + void handleMethodException(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, + Throwable t); +} +``` + +可以在方法执行前、执行后、执行异常三个点,进行拦截,设置修改方法参数(执行前),并调用核心API,设置追踪逻辑。 + +### 贡献插件到主仓库 +我们鼓励大家共同贡献支持各个类库的插件。 + +大家需支持以下步骤执行: +1. 在issue页面提出插件扩展需求,对应的版本。 +1. Fork wu-sheng/sky-walking到本地 +1. 在apm-sniffer/apm-sdk-plugin下新建自己的插件模块,模块名为:支持类库名称+版本号 +1. 按照规范开发插件 +1. 完善注释和测试用例 +1. 在本地打包进行集成测试 +1. 提交Pull Request到 wu-sheng/sky-walking,提供插件追踪的截图(拓扑和Trace明细),可独立运行的被追踪程序、docker镜像或docker-compose。 +1. sky-walking PMC( Project Management Committee) 成员完成插件审核,确定发布版本,并合并到主仓库。 \ No newline at end of file diff --git a/docs/cn/Quick-start-chn.md b/docs/cn/Quick-start-CN.md similarity index 100% rename from docs/cn/Quick-start-chn.md rename to docs/cn/Quick-start-CN.md diff --git a/docs/cn/Skywalking-3-Cross-Process-Propagation-Headers-Protocol-CN.md b/docs/cn/Skywalking-3-Cross-Process-Propagation-Headers-Protocol-CN.md new file mode 100644 index 000000000..7c1be7778 --- /dev/null +++ b/docs/cn/Skywalking-3-Cross-Process-Propagation-Headers-Protocol-CN.md @@ -0,0 +1,61 @@ +# Skywalking 3 Cross Process Propagation Headers Protocol +* Version 1.0 + +这是Skywalking3跨进程传输头协议第一个公开版本。Skywalking是一个偏向APM的分布式追踪系统,所以,为了提供服务端处理性能。头信息会比其他的追踪系统要更复杂一些。你会发现,这个头信息,更像一个商业APM系统,并且,一些商业APM系统的头信息,比我们的要复杂的多。所以,如果你希望开发或者贡献其他语言探针、或者JAVA探针的其他市县模式,请耐心阅读,并理解此协议内容。 + + +# Header Item +* Header Name: `sw3` +* Header Value: 使用`|`分隔,包含以下内容 + +## Values +* Trace Segment Id + +Trace segment,即分布式调用链片段。这个ID为此调用链片段全局唯一ID。此ID由一次分布式调用链的一个线程执行过程独享(在Java模型中)。ID由三个Long型组成,如: `"1.2343.234234234` + 1) 第一部分代表应用的实例ID(`application instance id`),此ID通过注册接口由Collector分配。一般取值范围为整形,利于protobuf传输。 + 2) 第二部分为线程号,Java模型中,一般也是整形。 + 3) 第三部分又由两部分组成 + 1) 时间戳,单位毫秒 + 2) 线程内的自增序列。0到9999之间。 + +如果你使用其他语言实现探针,你只需要保证你的ID由三个Long型构成,并全局唯一,不必完全遵守Java的ID生成规则。 + + +* Span Id + +一个整数,在trace segment内唯一,从0开始自增。 + +* Parent Application Instance + +父级应用节点的应用实例ID。如:在一个RPC调用中,HEAD中是客户端的应用实例ID。 + +* Entry Application Instance + +入口应用节点的应用实例ID。如:在一个分布式链路`A->B->C`中,此字段为`A`应用的实例ID。 + +* Peer Host + +服务端的Peer Host或Peer Id。如:客户端使用`182.14.39.1:9080`服务端,则这个就是对应的Peer Host。 + +_此值可以通过Collector服务获得对应的ID。如果非ID,则使用`#`开头,如果使用ID,则为整数类型。_ + +* Entry Span Operation Name of First Trace Segment + +调用链入口节点的应用实例下,入口Span的operation name或id。 + +_此值可以通过Collector服务获得对应的ID。如果非ID,则使用`#`开头,如果使用ID,则为整数类型。_ + +* Entry Span Operation Name of Parent Trace Segment + +调用链父级节点的应用实例下,入口Span的operation name或id。 + +_此值可以通过Collector服务获得对应的ID。如果非ID,则使用`#`开头,如果使用ID,则为整数类型。_ + +* Distributed Trace Id + +分布式链路ID一般是整个调用链的全局唯一ID。如果针对批量消费情况,这个ID是批量中,第一个生产者的trace ID。此ID生成规则和`Trace Segment Id`一致,由三个Long型数字构成。 + +### Sample value +value值示例: +1. `1.2343.234234234|1|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|1.2343.234234234` +1. `1.2343.234234234|1|1|1|#127.0.0.1:8080|#/portal/|1038|1.2343.234234234` \ No newline at end of file diff --git a/docs/cn/skywalking-opentracing-CN.md b/docs/cn/skywalking-opentracing-CN.md new file mode 100644 index 000000000..7d47e5412 --- /dev/null +++ b/docs/cn/skywalking-opentracing-CN.md @@ -0,0 +1,17 @@ +* 使用 maven 和 gradle 依赖相应的工具包 +```xml + + org.skywalking + apm-toolkit-opentracing + {project.release.version} + +``` + +   [ ![Download](https://api.bintray.com/packages/wu-sheng/skywalking/org.skywalking.apm-toolkit-opentracing/images/download.svg) ](https://bintray.com/wu-sheng/skywalking/org.skywalking.apm-toolkit-opentracing/_latestVersion) + +* 使用OpenTracing的标准API和桥接器,使用手动埋点 +```java +Tracer tracer = new org.skywalking.apm.toolkit.opentracing.SkyWalkingTracer(); +Tracer.SpanBuilder spanBuilder = tracer.buildSpan("/yourApplication/yourService"); + +``` \ No newline at end of file diff --git a/pom.xml b/pom.xml index 728756fc7..bf3ea48ad 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.skywalking apm - 3.2.3-2017 + 3.2.4-2017