diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java index 0c322b2f1..b0ffbd6dc 100644 --- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java +++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java @@ -47,4 +47,8 @@ public class TraceServiceModuleConfig extends ModuleConfig { * 2. NO means, only save trace, but metrics come other places, such as service mesh. */ @Setter @Getter private boolean traceAnalysis = true; + /** + * Slow Sql string length can't beyond this limit + */ + @Setter @Getter private int maxSlowSQLLength = 2000; } diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java index 7459abd1f..be6077d3b 100644 --- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java +++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java @@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener import java.util.*; import org.apache.skywalking.apm.network.common.KeyStringValuePair; import org.apache.skywalking.apm.network.language.agent.*; +import org.apache.skywalking.apm.util.StringUtil; import org.apache.skywalking.oap.server.core.*; import org.apache.skywalking.oap.server.core.cache.*; import org.apache.skywalking.oap.server.core.source.*; @@ -161,7 +162,13 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe statement.setTraceId(traceId); for (KeyStringValuePair tag : spanDecorator.getAllTags()) { if (SpanTags.DB_STATEMENT.equals(tag.getKey())) { - statement.setStatement(tag.getValue()); + String sqlStatement = tag.getValue(); + if (!StringUtil.isEmpty(sqlStatement) && sqlStatement.length() > config.getMaxSlowSQLLength()) { + statement.setStatement(sqlStatement.substring(0,config.getMaxSlowSQLLength())); + } + else { + statement.setStatement(sqlStatement); + } } else if (SpanTags.DB_TYPE.equals(tag.getKey())) { String dbType = tag.getValue();