You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/03/09 07:13:18 UTC
[shardingsphere] branch master updated: Agent add tracing for jdbc (#24515)
This is an automated email from the ASF dual-hosted git repository.
jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 31f31ad2662 Agent add tracing for jdbc (#24515)
31f31ad2662 is described below
commit 31f31ad2662236a2293d1358fa07ba49c88e7244
Author: jiangML <10...@qq.com>
AuthorDate: Thu Mar 9 15:13:08 2023 +0800
Agent add tracing for jdbc (#24515)
* optimize tracing and add tracing about JDBC
* optimize code
* update agent tracing doc
* optimize code
* optimize code
* optimize code
* optimize agent file plugin e2e test
---
.../agent/core/ShardingSphereAgent.java | 8 ++----
.../advisor/config/AdvisorConfigurationLoader.java | 6 ++--
.../agent/core/builder/AgentTransformer.java | 33 ++++++++++++++++++++--
...rTaskAdvice.java => TracingRootSpanAdvice.java} | 4 +--
...dvice.java => OpenTelemetryRootSpanAdvice.java} | 6 ++--
...y-advisors.yaml => opentelemetry-advisors.yaml} | 23 ++++++++++++++-
.../META-INF/conf/opentelemetry-jdbc-advisors.yaml | 16 -----------
...t.java => OpenTelemetryRootSpanAdviceTest.java} | 6 ++--
...kAdvice.java => OpenTracingRootSpanAdvice.java} | 6 ++--
...oxy-advisors.yaml => opentracing-advisors.yaml} | 23 ++++++++++++++-
.../META-INF/conf/opentracing-jdbc-advisors.yaml | 16 -----------
...est.java => OpenTracingRootSpanAdviceTest.java} | 4 +--
.../shardingsphere-jdbc/observability/_index.cn.md | 14 +++++++++
.../shardingsphere-jdbc/observability/_index.en.md | 15 ++++++++++
.../test/e2e/agent/file/FilePluginE2EIT.java | 2 +-
.../test/e2e/agent/file/loader/LogLoader.java | 6 ++--
16 files changed, 126 insertions(+), 62 deletions(-)
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereAgent.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereAgent.java
index 012c3de26b8..9b32b64d2a5 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereAgent.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/ShardingSphereAgent.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.agent.core;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import net.bytebuddy.pool.TypePool;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.core.advisor.config.AdvisorConfiguration;
import org.apache.shardingsphere.agent.core.advisor.config.AdvisorConfigurationLoader;
@@ -57,11 +58,6 @@ public final class ShardingSphereAgent {
}
private static boolean isEnhancedForProxy() {
- try {
- Class.forName("org.apache.shardingsphere.proxy.Bootstrap");
- } catch (final ClassNotFoundException ignored) {
- return false;
- }
- return true;
+ return TypePool.Default.ofSystemLoader().describe("org.apache.shardingsphere.proxy.Bootstrap").isResolved();
}
}
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java
index d5f30088ea4..22bff1ae6eb 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/advisor/config/AdvisorConfigurationLoader.java
@@ -24,8 +24,8 @@ import org.apache.shardingsphere.agent.core.advisor.config.yaml.swapper.YamlAdvi
import org.apache.shardingsphere.agent.core.log.AgentLogger;
import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
import org.apache.shardingsphere.agent.core.plugin.classloader.AgentPluginClassLoader;
-import org.apache.shardingsphere.agent.core.plugin.jar.PluginJarLoader;
+import java.io.File;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
@@ -38,7 +38,7 @@ import java.util.jar.JarFile;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class AdvisorConfigurationLoader {
- private static final AgentLogger LOGGER = AgentLoggerFactory.getAgentLogger(PluginJarLoader.class);
+ private static final AgentLogger LOGGER = AgentLoggerFactory.getAgentLogger(AdvisorConfigurationLoader.class);
/**
* Load advisor configurations.
@@ -68,7 +68,7 @@ public final class AdvisorConfigurationLoader {
}
private static InputStream getResourceStream(final ClassLoader pluginClassLoader, final String fileName) {
- return pluginClassLoader.getResourceAsStream(String.join("/", "META-INF", "conf", fileName));
+ return pluginClassLoader.getResourceAsStream(String.join(File.separator, "META-INF", "conf", fileName));
}
private static String getFileName(final String pluginType, final boolean isEnhancedForProxy) {
diff --git a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java
index 64167658c44..2b932b45ac3 100644
--- a/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java
+++ b/agent/core/src/main/java/org/apache/shardingsphere/agent/core/builder/AgentTransformer.java
@@ -21,17 +21,25 @@ import lombok.RequiredArgsConstructor;
import net.bytebuddy.agent.builder.AgentBuilder.Transformer;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType.Builder;
+import net.bytebuddy.pool.TypePool;
+import net.bytebuddy.pool.TypePool.Default;
import net.bytebuddy.utility.JavaModule;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.core.advisor.config.AdvisorConfiguration;
+import org.apache.shardingsphere.agent.core.advisor.config.AdvisorConfigurationLoader;
+import org.apache.shardingsphere.agent.core.advisor.config.MethodAdvisorConfiguration;
import org.apache.shardingsphere.agent.core.builder.interceptor.AgentBuilderInterceptChainEngine;
import org.apache.shardingsphere.agent.core.builder.interceptor.impl.MethodAdvisorBuilderInterceptor;
import org.apache.shardingsphere.agent.core.builder.interceptor.impl.TargetAdviceObjectBuilderInterceptor;
+import org.apache.shardingsphere.agent.core.classloader.AgentExtraClassLoader;
import org.apache.shardingsphere.agent.core.classloader.ClassLoaderContext;
+import org.apache.shardingsphere.agent.core.log.AgentLogger;
+import org.apache.shardingsphere.agent.core.log.AgentLoggerFactory;
import org.apache.shardingsphere.agent.core.plugin.PluginLifecycleServiceManager;
import java.util.Collection;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.jar.JarFile;
/**
@@ -40,6 +48,10 @@ import java.util.jar.JarFile;
@RequiredArgsConstructor
public final class AgentTransformer implements Transformer {
+ private static final AgentLogger LOGGER = AgentLoggerFactory.getAgentLogger(AdvisorConfigurationLoader.class);
+
+ private static final Map<AgentExtraClassLoader, TypePool> TYPE_POOL_MAP = new ConcurrentHashMap<>();
+
private final Map<String, PluginConfiguration> pluginConfigs;
private final Collection<JarFile> pluginJars;
@@ -56,7 +68,24 @@ public final class AgentTransformer implements Transformer {
}
ClassLoaderContext classLoaderContext = new ClassLoaderContext(classLoader, pluginJars);
PluginLifecycleServiceManager.init(pluginConfigs, pluginJars, classLoaderContext.getPluginClassLoader(), isEnhancedForProxy);
- return AgentBuilderInterceptChainEngine.intercept(builder,
- new TargetAdviceObjectBuilderInterceptor(), new MethodAdvisorBuilderInterceptor(typeDescription, classLoaderContext, advisorConfigs.get(typeDescription.getTypeName())));
+ return AgentBuilderInterceptChainEngine.intercept(builder, new TargetAdviceObjectBuilderInterceptor(),
+ new MethodAdvisorBuilderInterceptor(typeDescription, classLoaderContext, filterInvalidAdviceClass(advisorConfigs.get(typeDescription.getTypeName()), classLoaderContext)));
+ }
+
+ private AdvisorConfiguration filterInvalidAdviceClass(final AdvisorConfiguration advisorConfig, final ClassLoaderContext classLoaderContext) {
+ AdvisorConfiguration result = new AdvisorConfiguration(advisorConfig.getTargetClassName());
+ for (MethodAdvisorConfiguration each : advisorConfig.getAdvisors()) {
+ if (isExist(each.getAdviceClassName(), classLoaderContext.getPluginClassLoader())) {
+ result.getAdvisors().add(each);
+ continue;
+ }
+ LOGGER.error("The advice class `{}` does not exist", each.getAdviceClassName());
+ }
+ return result;
+ }
+
+ private boolean isExist(final String adviceClassName, final AgentExtraClassLoader pluginClassLoader) {
+ TypePool typePool = TYPE_POOL_MAP.get(pluginClassLoader);
+ return null == typePool ? TYPE_POOL_MAP.computeIfAbsent(pluginClassLoader, Default::of).describe(adviceClassName).isResolved() : typePool.describe(adviceClassName).isResolved();
}
}
diff --git a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingCommandExecutorTaskAdvice.java b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingRootSpanAdvice.java
similarity index 94%
rename from agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingCommandExecutorTaskAdvice.java
rename to agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingRootSpanAdvice.java
index 78a60908102..6a1a234f35b 100644
--- a/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingCommandExecutorTaskAdvice.java
+++ b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingRootSpanAdvice.java
@@ -24,11 +24,11 @@ import org.apache.shardingsphere.agent.plugin.tracing.core.RootSpanContext;
import java.lang.reflect.Method;
/**
- * Tracing command executor task advice executor.
+ * Tracing root span advice.
*
* @param <T> type of span
*/
-public abstract class TracingCommandExecutorTaskAdvice<T> implements InstanceMethodAdvice {
+public abstract class TracingRootSpanAdvice<T> implements InstanceMethodAdvice {
protected static final String OPERATION_NAME = "/ShardingSphere/rootInvoke/";
diff --git a/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryCommandExecutorTaskAdvice.java b/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryRootSpanAdvice.java
similarity index 92%
rename from agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryCommandExecutorTaskAdvice.java
rename to agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryRootSpanAdvice.java
index c714cb6f946..827f8e1c364 100644
--- a/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryCommandExecutorTaskAdvice.java
+++ b/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryRootSpanAdvice.java
@@ -22,16 +22,16 @@ import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.StatusCode;
import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
-import org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingCommandExecutorTaskAdvice;
+import org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingRootSpanAdvice;
import org.apache.shardingsphere.agent.plugin.tracing.core.constant.AttributeConstants;
import org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.constant.OpenTelemetryConstants;
import java.lang.reflect.Method;
/**
- * OpenTelemetry command executor task advice executor.
+ * OpenTelemetry root span advice.
*/
-public final class OpenTelemetryCommandExecutorTaskAdvice extends TracingCommandExecutorTaskAdvice<Span> {
+public final class OpenTelemetryRootSpanAdvice extends TracingRootSpanAdvice<Span> {
@Override
protected Span createRootSpan(final TargetAdviceObject target, final Method method, final Object[] args) {
diff --git a/agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-proxy-advisors.yaml b/agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-advisors.yaml
similarity index 66%
rename from agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-proxy-advisors.yaml
rename to agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-advisors.yaml
index 0fbbd7f9329..d61d61f8c44 100644
--- a/agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-proxy-advisors.yaml
+++ b/agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-advisors.yaml
@@ -17,10 +17,31 @@
advisors:
- target: org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask
- advice: org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.advice.OpenTelemetryCommandExecutorTaskAdvice
+ advice: org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.advice.OpenTelemetryRootSpanAdvice
pointcuts:
- name: run
type: method
+ - target: org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement
+ advice: org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.advice.OpenTelemetryRootSpanAdvice
+ pointcuts:
+ - name: executeQuery
+ type: method
+ - name: execute
+ type: method
+ - name: executeUpdate
+ type: method
+ params:
+ - index: 0
+ type: java.lang.String
+ - target: org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement
+ advice: org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.advice.OpenTelemetryRootSpanAdvice
+ pointcuts:
+ - name: executeQuery
+ type: method
+ - name: execute
+ type: method
+ - name: executeUpdate
+ type: method
- target: org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine
advice: org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.advice.OpenTelemetrySQLParserEngineAdvice
pointcuts:
diff --git a/agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-jdbc-advisors.yaml b/agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-jdbc-advisors.yaml
deleted file mode 100644
index b1312a0905c..00000000000
--- a/agent/plugins/tracing/type/opentelemetry/src/main/resources/META-INF/conf/opentelemetry-jdbc-advisors.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# 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.
-#
diff --git a/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryCommandExecutorTaskAdviceTest.java b/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryRootSpanAdviceTest.java
similarity index 95%
rename from agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryCommandExecutorTaskAdviceTest.java
rename to agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryRootSpanAdviceTest.java
index 8d936d633ef..f9585fc364c 100644
--- a/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryCommandExecutorTaskAdviceTest.java
+++ b/agent/plugins/tracing/type/opentelemetry/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryRootSpanAdviceTest.java
@@ -54,7 +54,7 @@ import static org.mockito.Mockito.when;
@ExtendWith({AgentExtension.class, AutoMockExtension.class})
@StaticMockSettings(ProxyContext.class)
-public final class OpenTelemetryCommandExecutorTaskAdviceTest {
+public final class OpenTelemetryRootSpanAdviceTest {
private final InMemorySpanExporter testExporter = InMemorySpanExporter.create();
@@ -78,7 +78,7 @@ public final class OpenTelemetryCommandExecutorTaskAdviceTest {
@Test
public void assertMethod() {
- OpenTelemetryCommandExecutorTaskAdvice advice = new OpenTelemetryCommandExecutorTaskAdvice();
+ OpenTelemetryRootSpanAdvice advice = new OpenTelemetryRootSpanAdvice();
advice.beforeMethod(targetObject, null, new Object[]{}, "OpenTelemetry");
advice.afterMethod(targetObject, null, new Object[]{}, null, "OpenTelemetry");
List<SpanData> spanItems = testExporter.getFinishedSpanItems();
@@ -91,7 +91,7 @@ public final class OpenTelemetryCommandExecutorTaskAdviceTest {
@Test
public void assertExceptionHandle() {
- OpenTelemetryCommandExecutorTaskAdvice advice = new OpenTelemetryCommandExecutorTaskAdvice();
+ OpenTelemetryRootSpanAdvice advice = new OpenTelemetryRootSpanAdvice();
advice.beforeMethod(targetObject, null, new Object[]{}, "OpenTelemetry");
advice.onThrowing(targetObject, null, new Object[]{}, new IOException(), "OpenTelemetry");
List<SpanData> spanItems = testExporter.getFinishedSpanItems();
diff --git a/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingCommandExecutorTaskAdvice.java b/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingRootSpanAdvice.java
similarity index 91%
rename from agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingCommandExecutorTaskAdvice.java
rename to agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingRootSpanAdvice.java
index ef24baeb155..8adf13b9f37 100644
--- a/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingCommandExecutorTaskAdvice.java
+++ b/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingRootSpanAdvice.java
@@ -20,16 +20,16 @@ package org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice;
import io.opentracing.Span;
import io.opentracing.util.GlobalTracer;
import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
-import org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingCommandExecutorTaskAdvice;
+import org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingRootSpanAdvice;
import org.apache.shardingsphere.agent.plugin.tracing.core.constant.AttributeConstants;
import org.apache.shardingsphere.agent.plugin.tracing.opentracing.span.OpenTracingErrorSpan;
import java.lang.reflect.Method;
/**
- * OpenTracing command executor task advice executor.
+ * OpenTracing root span advice.
*/
-public final class OpenTracingCommandExecutorTaskAdvice extends TracingCommandExecutorTaskAdvice<Span> {
+public final class OpenTracingRootSpanAdvice extends TracingRootSpanAdvice<Span> {
@Override
protected Span createRootSpan(final TargetAdviceObject target, final Method method, final Object[] args) {
diff --git a/agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-proxy-advisors.yaml b/agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-advisors.yaml
similarity index 67%
rename from agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-proxy-advisors.yaml
rename to agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-advisors.yaml
index 7d039fd47b2..d28b70f26cc 100644
--- a/agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-proxy-advisors.yaml
+++ b/agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-advisors.yaml
@@ -17,10 +17,31 @@
advisors:
- target: org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask
- advice: org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice.OpenTracingCommandExecutorTaskAdvice
+ advice: org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice.OpenTracingRootSpanAdvice
pointcuts:
- name: run
type: method
+ - target: org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement
+ advice: org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice.OpenTracingRootSpanAdvice
+ pointcuts:
+ - name: executeQuery
+ type: method
+ - name: execute
+ type: method
+ - name: executeUpdate
+ type: method
+ params:
+ - index: 0
+ type: java.lang.String
+ - target: org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement
+ advice: org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice.OpenTracingRootSpanAdvice
+ pointcuts:
+ - name: executeQuery
+ type: method
+ - name: execute
+ type: method
+ - name: executeUpdate
+ type: method
- target: org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine
advice: org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice.OpenTracingSQLParserEngineAdvice
pointcuts:
diff --git a/agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-jdbc-advisors.yaml b/agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-jdbc-advisors.yaml
deleted file mode 100644
index b1312a0905c..00000000000
--- a/agent/plugins/tracing/type/opentracing/src/main/resources/META-INF/conf/opentracing-jdbc-advisors.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# 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.
-#
diff --git a/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingCommandExecutorTaskAdviceTest.java b/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingRootSpanAdviceTest.java
similarity index 96%
rename from agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingCommandExecutorTaskAdviceTest.java
rename to agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingRootSpanAdviceTest.java
index 279166c7a6d..2bfb6825a7e 100644
--- a/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingCommandExecutorTaskAdviceTest.java
+++ b/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingRootSpanAdviceTest.java
@@ -56,9 +56,9 @@ import static org.mockito.Mockito.when;
@ExtendWith({AgentExtension.class, AutoMockExtension.class})
@StaticMockSettings(ProxyContext.class)
-public final class OpenTracingCommandExecutorTaskAdviceTest {
+public final class OpenTracingRootSpanAdviceTest {
- private static final OpenTracingCommandExecutorTaskAdvice ADVICE = new OpenTracingCommandExecutorTaskAdvice();
+ private static final OpenTracingRootSpanAdvice ADVICE = new OpenTracingRootSpanAdvice();
private static MockTracer tracer;
diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md
index befb856d874..0b415b93a48 100644
--- a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md
+++ b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.cn.md
@@ -90,6 +90,20 @@ plugins:
| port | 端口 |
| jvm-information-collector-enabled | 是否采集 JVM 指标信息 |
+#### OpenTelemetry
+
+OpenTelemetry 可以导出 tracing 数据到 Jaeger,Zipkin。
+
+* 参数说明
+
+| 名称 | 说明 |
+|------------------------------------|----------------------|
+| otel.service.name | 服务名称 |
+| otel.traces.exporter | traces exporter |
+| otel.exporter.otlp.traces.endpoint | traces endpoint |
+| otel.traces.sampler | traces sampler |
+
+参数参考 [OpenTelemetry SDK Autoconfigure](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure)
## ShardingSphere-JDBC 使用
diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md
index 21eed5eab7b..f2c096a5a68 100644
--- a/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md
+++ b/docs/document/content/user-manual/shardingsphere-jdbc/observability/_index.en.md
@@ -92,6 +92,21 @@ Used for exposure monitoring metrics.
| port | port |
| jvm-information-collector-enabled | whether to collect JVM indicator information |
+#### OpenTelemetry
+
+OpenTelemetry can export tracing data to Jaeger, Zipkin.
+
+* Parameter description
+
+| Name | Description |
+|------------------------------------|-----------------|
+| otel.service.name | service name |
+| otel.traces.exporter | traces exporter |
+| otel.exporter.otlp.traces.endpoint | traces endpoint |
+| otel.traces.sampler | traces sampler |
+
+Parameter reference [OpenTelemetry SDK Autoconfigure](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure)
+
## Usage in ShardingSphere-JDBC
+ 1 The `SpringBoot` project ready to integrate `ShardingSphere-JDBC`, test-project.jar
diff --git a/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/FilePluginE2EIT.java b/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/FilePluginE2EIT.java
index 99d390bae8d..4b2681d9135 100644
--- a/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/FilePluginE2EIT.java
+++ b/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/FilePluginE2EIT.java
@@ -39,7 +39,7 @@ public final class FilePluginE2EIT extends BasePluginE2EIT {
private Collection<String> getExpectedLogRegex() {
Collection<String> result = new LinkedList<>();
- result.add("Build meta data contexts finished, cost\\s(?=[1-9]+)");
+ result.add("Build meta data contexts finished, cost\\s(?=[1-9]+\\d*)");
return result;
}
}
diff --git a/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/loader/LogLoader.java b/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/loader/LogLoader.java
index a662bb59721..40a971d340d 100644
--- a/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/loader/LogLoader.java
+++ b/test/e2e/agent/plugins/logging/file/src/test/java/org/apache/shardingsphere/test/e2e/agent/file/loader/LogLoader.java
@@ -49,7 +49,7 @@ public final class LogLoader {
Matcher matcher = pattern.matcher(each);
if (matcher.find()) {
if (hasFind) {
- result.add(builder.toString());
+ result.add(builder.append(System.lineSeparator()).toString());
builder.delete(0, builder.length());
}
builder.append(each);
@@ -61,7 +61,7 @@ public final class LogLoader {
}
}
if (builder.length() > 0) {
- result.add(builder.toString());
+ result.add(builder.append(System.lineSeparator()).toString());
}
return result;
}
@@ -72,7 +72,7 @@ public final class LogLoader {
* @return log file path
*/
public static String getLogFilePath() {
- return String.join(File.separator, System.getProperty("user.dir"), "target", "logs", "stdout.log");
+ return String.join(File.separator, Paths.get("").toAbsolutePath().toString(), "target", "logs", "stdout.log");
}
/**