From f0acf9b61fe21de6f21c8d98f7b6abfca7ccc6eb Mon Sep 17 00:00:00 2001 From: webb2019 <52440226+webb2019@users.noreply.github.com> Date: Sun, 25 Aug 2019 21:21:48 +0800 Subject: [PATCH] slow sql long string trim (#3318) * slow sql long string trim * fix slow sql has long string --- .../trace/provider/TraceServiceModuleConfig.java | 4 ++++ .../listener/endpoint/MultiScopesSpanListener.java | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) 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();