You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/11/17 01:56:24 UTC
[skywalking-java] branch main updated: Support collecting dubbo thread pool metrics (#382)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git
The following commit(s) were added to refs/heads/main by this push:
new 7eb796bd28 Support collecting dubbo thread pool metrics (#382)
7eb796bd28 is described below
commit 7eb796bd282f2486445996d197354611c07948a5
Author: Stephen Ni <ni...@users.noreply.github.com>
AuthorDate: Thu Nov 17 09:56:19 2022 +0800
Support collecting dubbo thread pool metrics (#382)
---
CHANGES.md | 1 +
.../AbstractServerConstructorInterceptor.java | 85 ++++++++++++++++++++++
.../asf/dubbo/AbstractServerInstrumentation.java | 61 ++++++++++++++++
.../src/main/resources/skywalking-plugin.def | 1 +
.../AbstractServerConstructorInterceptor.java | 85 ++++++++++++++++++++++
.../dubbo/AbstractServerInstrumentation.java | 61 ++++++++++++++++
.../src/main/resources/skywalking-plugin.def | 1 +
.../setup/service-agent/java-agent/Plugin-list.md | 2 +
.../service-agent/java-agent/Supported-list.md | 1 +
.../dubbo-2.5.x-scenario/config/expectedData.yaml | 58 ++++++++++++++-
.../dubbo-2.5.x-scenario/configuration.yml | 2 +
.../skywalking/apm/testcase/dubbo/Application.java | 4 +-
.../dubbo-2.7.x-scenario/config/expectedData.yaml | 58 ++++++++++++++-
.../dubbo-2.7.x-scenario/configuration.yml | 2 +
.../skywalking/apm/testcase/dubbo/Application.java | 4 +-
15 files changed, 416 insertions(+), 10 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index 38a1fc722c..6097fc6698 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -8,6 +8,7 @@ Release Notes.
* Polish test framework to support `arm64/v8` platforms
* Fix wrong config name `plugin.toolkit.use_qualified_name_as_operation_name`, and system variable name `SW_PLUGIN_TOOLKIT_USE_QUALIFIED_NAME_AS_OPERATION_NAME:false`. They were **toolit**.
* Rename `JDBI` to `JDBC`
+* Support collecting dubbo thread pool metrics
#### Documentation
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/AbstractServerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/AbstractServerConstructorInterceptor.java
new file mode 100644
index 0000000000..75b331e770
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/AbstractServerConstructorInterceptor.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ */
+
+package org.apache.skywalking.apm.plugin.asf.dubbo;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.remoting.transport.AbstractServer;
+import org.apache.skywalking.apm.agent.core.meter.MeterFactory;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
+
+import java.lang.reflect.Field;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
+
+public class AbstractServerConstructorInterceptor implements InstanceConstructorInterceptor {
+ private static final String METER_NAME = "thread_pool";
+ private static final String METRIC_POOL_NAME_TAG_NAME = "pool_name";
+ private static final String METRIC_TYPE_TAG_NAME = "metric_type";
+
+ @Override
+ public void onConstruct(EnhancedInstance objInst, Object[] allArguments) throws Throwable {
+ Field executorField = AbstractServer.class.getDeclaredField("executor");
+ executorField.setAccessible(true);
+ ExecutorService executor = (ExecutorService) executorField.get(objInst);
+
+ URL url = (URL) allArguments[0];
+ int port = url.getPort();
+
+ if (!(executor instanceof ThreadPoolExecutor)) {
+ return;
+ }
+ ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
+ // TODO String.format("DubboServerHandler-%s:%s", host, port) will be better
+ String threadPoolName = String.format("DubboServerHandler-%s", port);
+
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getCorePoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "core_pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getMaximumPoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "max_pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getLargestPoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "largest_pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getPoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getQueue().size()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "queue_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getActiveCount()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "active_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getTaskCount()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "task_count")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getCompletedTaskCount()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "completed_task_count")
+ .build();
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/AbstractServerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/AbstractServerInstrumentation.java
new file mode 100644
index 0000000000..5db5962e89
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/asf/dubbo/AbstractServerInstrumentation.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ */
+
+package org.apache.skywalking.apm.plugin.asf.dubbo;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.any;
+import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class AbstractServerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+ private static final String ENHANCE_CLASS = "org.apache.dubbo.remoting.transport.AbstractServer";
+ private static final String CONSTRUCTOR_INTERCEPTOR = "org.apache.skywalking.apm.plugin.asf.dubbo.AbstractServerConstructorInterceptor";
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+
+ @Override
+ public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[]{
+ new ConstructorInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription> getConstructorMatcher() {
+ return any();
+ }
+
+ @Override
+ public String getConstructorInterceptor() {
+ return CONSTRUCTOR_INTERCEPTOR;
+ }
+ }
+ };
+ }
+
+ @Override
+ public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[0];
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/resources/skywalking-plugin.def
index f6b64e0ba3..725d2739a4 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-2.7.x-plugin/src/main/resources/skywalking-plugin.def
@@ -15,3 +15,4 @@
# limitations under the License.
dubbo-2.7.x=org.apache.skywalking.apm.plugin.asf.dubbo.DubboInstrumentation
+dubbo-threadpool-2.7.x=org.apache.skywalking.apm.plugin.asf.dubbo.AbstractServerInstrumentation
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/AbstractServerConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/AbstractServerConstructorInterceptor.java
new file mode 100644
index 0000000000..99e53c66de
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/AbstractServerConstructorInterceptor.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ */
+
+package org.apache.skywalking.apm.plugin.dubbo;
+
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.remoting.transport.AbstractServer;
+import org.apache.skywalking.apm.agent.core.meter.MeterFactory;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
+
+import java.lang.reflect.Field;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
+
+public class AbstractServerConstructorInterceptor implements InstanceConstructorInterceptor {
+ private static final String METER_NAME = "thread_pool";
+ private static final String METRIC_POOL_NAME_TAG_NAME = "pool_name";
+ private static final String METRIC_TYPE_TAG_NAME = "metric_type";
+
+ @Override
+ public void onConstruct(EnhancedInstance objInst, Object[] allArguments) throws Throwable {
+ Field executorField = AbstractServer.class.getDeclaredField("executor");
+ executorField.setAccessible(true);
+ ExecutorService executor = (ExecutorService) executorField.get(objInst);
+
+ URL url = (URL) allArguments[0];
+ int port = url.getPort();
+
+ if (!(executor instanceof ThreadPoolExecutor)) {
+ return;
+ }
+ ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
+ // TODO String.format("DubboServerHandler-%s:%s", host, port) will be better
+ String threadPoolName = String.format("DubboServerHandler-%s", port);
+
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getCorePoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "core_pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getMaximumPoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "max_pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getLargestPoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "largest_pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getPoolSize()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "pool_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getQueue().size()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "queue_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getActiveCount()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "active_size")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getTaskCount()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "task_count")
+ .build();
+ MeterFactory.gauge(METER_NAME, () -> (double) (threadPoolExecutor.getCompletedTaskCount()))
+ .tag(METRIC_POOL_NAME_TAG_NAME, threadPoolName)
+ .tag(METRIC_TYPE_TAG_NAME, "completed_task_count")
+ .build();
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/AbstractServerInstrumentation.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/AbstractServerInstrumentation.java
new file mode 100644
index 0000000000..54bd8ee8ac
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/apache/skywalking/apm/plugin/dubbo/AbstractServerInstrumentation.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ */
+
+package org.apache.skywalking.apm.plugin.dubbo;
+
+import net.bytebuddy.description.method.MethodDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
+import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
+import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
+
+import static net.bytebuddy.matcher.ElementMatchers.any;
+import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
+
+public class AbstractServerInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
+ private static final String ENHANCE_CLASS = "com.alibaba.dubbo.remoting.transport.AbstractServer";
+ private static final String CONSTRUCTOR_INTERCEPTOR = "org.apache.skywalking.apm.plugin.dubbo.AbstractServerConstructorInterceptor";
+
+ @Override
+ protected ClassMatch enhanceClass() {
+ return byName(ENHANCE_CLASS);
+ }
+
+ @Override
+ public ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
+ return new ConstructorInterceptPoint[]{
+ new ConstructorInterceptPoint() {
+ @Override
+ public ElementMatcher<MethodDescription> getConstructorMatcher() {
+ return any();
+ }
+
+ @Override
+ public String getConstructorInterceptor() {
+ return CONSTRUCTOR_INTERCEPTOR;
+ }
+ }
+ };
+ }
+
+ @Override
+ public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[0];
+ }
+}
diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/resources/skywalking-plugin.def
index aabf09193d..229c95c570 100644
--- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/resources/skywalking-plugin.def
+++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/resources/skywalking-plugin.def
@@ -15,3 +15,4 @@
# limitations under the License.
dubbo=org.apache.skywalking.apm.plugin.dubbo.DubboInstrumentation
+dubbo-threadpool=org.apache.skywalking.apm.plugin.dubbo.AbstractServerInstrumentation
diff --git a/docs/en/setup/service-agent/java-agent/Plugin-list.md b/docs/en/setup/service-agent/java-agent/Plugin-list.md
index 1390befff3..706f040ce8 100644
--- a/docs/en/setup/service-agent/java-agent/Plugin-list.md
+++ b/docs/en/setup/service-agent/java-agent/Plugin-list.md
@@ -15,6 +15,8 @@
- dubbo
- dubbo-2.7.x
- dubbo-3.x
+- dubbo-threadpool
+- dubbo-threadpool-2.7.x
- ehcache-2.x
- elastic-job-2.x
- elasticjob-3.x
diff --git a/docs/en/setup/service-agent/java-agent/Supported-list.md b/docs/en/setup/service-agent/java-agent/Supported-list.md
index 95bf1af210..0d43e9424e 100644
--- a/docs/en/setup/service-agent/java-agent/Supported-list.md
+++ b/docs/en/setup/service-agent/java-agent/Supported-list.md
@@ -151,6 +151,7 @@ The meter plugin provides the advanced metrics collections, which are not a part
* Thread Pool
* [Undertow](https://github.com/undertow-io/undertow) 2.1.x -> 2.6.x
* [Tomcat](https://github.com/apache/tomcat) 7.0.x -> 10.0.x
+ * [Dubbo](https://github.com/apache/dubbo) 2.5.x -> 2.7.x
___
¹Due to license incompatibilities/restrictions these plugins are hosted and released in 3rd part repository,
go to [SkyAPM java plugin extension repository](https://github.com/SkyAPM/java-plugin-extensions) to get these.
diff --git a/test/plugin/scenarios/dubbo-2.5.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/dubbo-2.5.x-scenario/config/expectedData.yaml
index 8eaa181c6d..15d9575dd7 100644
--- a/test/plugin/scenarios/dubbo-2.5.x-scenario/config/expectedData.yaml
+++ b/test/plugin/scenarios/dubbo-2.5.x-scenario/config/expectedData.yaml
@@ -32,7 +32,7 @@ segmentItems:
tags:
- {key: url, value: not null}
refs:
- - {parentEndpoint: GET:/dubbo-2.5.x-scenario/case/dubbo, networkAddress: 'localhost:20080',
+ - {parentEndpoint: GET:/dubbo-2.5.x-scenario/case/dubbo, networkAddress: 'localhost:20880',
refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null, parentServiceInstance: not
null, parentService: dubbo-2.5.x-scenario, traceId: not null}
skipAnalysis: 'false'
@@ -47,9 +47,9 @@ segmentItems:
componentId: 3
isError: false
spanType: Exit
- peer: localhost:20080
+ peer: localhost:20880
tags:
- - {key: url, value: 'dubbo://localhost:20080/org.apache.skywalking.apm.testcase.dubbo.services.GreetService.doBusiness()'}
+ - {key: url, value: 'dubbo://localhost:20880/org.apache.skywalking.apm.testcase.dubbo.services.GreetService.doBusiness()'}
skipAnalysis: 'false'
- operationName: GET:/dubbo-2.5.x-scenario/case/dubbo
parentSpanId: -1
@@ -66,3 +66,55 @@ segmentItems:
- {key: http.method, value: GET}
- {key: http.status_code, value: '200'}
skipAnalysis: 'false'
+meterItems:
+ - serviceName: dubbo-2.5.x-scenario
+ meterSize: ge 8
+ meters:
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: core_pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 1
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: max_pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 1
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: largest_pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 1
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: queue_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: active_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: task_count}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: completed_task_count}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
diff --git a/test/plugin/scenarios/dubbo-2.5.x-scenario/configuration.yml b/test/plugin/scenarios/dubbo-2.5.x-scenario/configuration.yml
index cf975f31d0..91fcc8161d 100644
--- a/test/plugin/scenarios/dubbo-2.5.x-scenario/configuration.yml
+++ b/test/plugin/scenarios/dubbo-2.5.x-scenario/configuration.yml
@@ -18,3 +18,5 @@ type: jvm
entryService: http://localhost:8080/dubbo-2.5.x-scenario/case/dubbo
healthCheck: http://localhost:8080/dubbo-2.5.x-scenario/case/healthCheck
startScript: ./bin/startup.sh
+environment:
+ - SW_METER_REPORT_INTERVAL=1
\ No newline at end of file
diff --git a/test/plugin/scenarios/dubbo-2.5.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java b/test/plugin/scenarios/dubbo-2.5.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java
index 1918964ce9..d3b74fdecb 100644
--- a/test/plugin/scenarios/dubbo-2.5.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java
+++ b/test/plugin/scenarios/dubbo-2.5.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java
@@ -44,7 +44,7 @@ public class Application {
private RegistryConfig registryConfig = new RegistryConfig("N/A");
- private ProtocolConfig protocolConfig = new ProtocolConfig("dubbo", 20080);
+ private ProtocolConfig protocolConfig = new ProtocolConfig("dubbo", 20880);
@Bean(destroyMethod = "unexport")
public ServiceConfig<GreetService> service() {
@@ -65,7 +65,7 @@ public class Application {
referenceConfig.setApplication(applicationConfig);
referenceConfig.setInterface(GreetService.class);
- referenceConfig.setUrl("dubbo://localhost:20080");
+ referenceConfig.setUrl("dubbo://localhost:20880");
return referenceConfig;
}
diff --git a/test/plugin/scenarios/dubbo-2.7.x-scenario/config/expectedData.yaml b/test/plugin/scenarios/dubbo-2.7.x-scenario/config/expectedData.yaml
index 10fb8aabe9..545e28c4b3 100644
--- a/test/plugin/scenarios/dubbo-2.7.x-scenario/config/expectedData.yaml
+++ b/test/plugin/scenarios/dubbo-2.7.x-scenario/config/expectedData.yaml
@@ -34,7 +34,7 @@ segmentItems:
- {key: url, value: not null}
- {key: arguments, value: helloWorld}
refs:
- - {parentEndpoint: GET:/dubbo-2.7.x-scenario/case/dubbo, networkAddress: 'localhost:20080',
+ - {parentEndpoint: GET:/dubbo-2.7.x-scenario/case/dubbo, networkAddress: 'localhost:20880',
refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null,
parentServiceInstance: not null, parentService: dubbo-2.7.x-scenario, traceId: not null}
skipAnalysis: 'false'
@@ -49,9 +49,9 @@ segmentItems:
componentId: 3
isError: false
spanType: Exit
- peer: localhost:20080
+ peer: localhost:20880
tags:
- - {key: url, value: 'dubbo://localhost:20080/org.apache.skywalking.apm.testcase.dubbo.services.GreetService.doBusiness(String)'}
+ - {key: url, value: 'dubbo://localhost:20880/org.apache.skywalking.apm.testcase.dubbo.services.GreetService.doBusiness(String)'}
- {key: arguments, value: helloWorld}
skipAnalysis: 'false'
- operationName: GET:/dubbo-2.7.x-scenario/case/dubbo
@@ -69,3 +69,55 @@ segmentItems:
- {key: http.method, value: GET}
- {key: http.status_code, value: '200'}
skipAnalysis: 'false'
+meterItems:
+ - serviceName: dubbo-2.7.x-scenario
+ meterSize: ge 8
+ meters:
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: core_pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 1
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: max_pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 1
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: largest_pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 1
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: pool_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: queue_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: active_size}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: task_count}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
+ - meterId:
+ name: thread_pool
+ tags:
+ - {name: metric_type, value: completed_task_count}
+ - {name: pool_name, value: DubboServerHandler-20880}
+ singleValue: ge 0
diff --git a/test/plugin/scenarios/dubbo-2.7.x-scenario/configuration.yml b/test/plugin/scenarios/dubbo-2.7.x-scenario/configuration.yml
index 98f24d2b53..572a573676 100644
--- a/test/plugin/scenarios/dubbo-2.7.x-scenario/configuration.yml
+++ b/test/plugin/scenarios/dubbo-2.7.x-scenario/configuration.yml
@@ -18,3 +18,5 @@ type: jvm
entryService: http://localhost:8080/dubbo-2.7.x-scenario/case/dubbo
healthCheck: http://localhost:8080/dubbo-2.7.x-scenario/case/healthCheck
startScript: ./bin/startup.sh
+environment:
+ - SW_METER_REPORT_INTERVAL=1
diff --git a/test/plugin/scenarios/dubbo-2.7.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java b/test/plugin/scenarios/dubbo-2.7.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java
index 933fee49e7..c12a9894e2 100644
--- a/test/plugin/scenarios/dubbo-2.7.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java
+++ b/test/plugin/scenarios/dubbo-2.7.x-scenario/src/main/java/org/apache/skywalking/apm/testcase/dubbo/Application.java
@@ -44,7 +44,7 @@ public class Application {
private RegistryConfig registryConfig = new RegistryConfig("N/A");
- private ProtocolConfig protocolConfig = new ProtocolConfig("dubbo", 20080);
+ private ProtocolConfig protocolConfig = new ProtocolConfig("dubbo", 20880);
@Bean(destroyMethod = "unexport")
public ServiceConfig<GreetService> service() {
@@ -65,7 +65,7 @@ public class Application {
referenceConfig.setApplication(applicationConfig);
referenceConfig.setInterface(GreetService.class);
- referenceConfig.setUrl("dubbo://localhost:20080");
+ referenceConfig.setUrl("dubbo://localhost:20880");
return referenceConfig;
}