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 2019/02/10 15:58:15 UTC
[incubator-skywalking] branch top-sql updated: Support different
slow thresholds for different db types.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch top-sql
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
The following commit(s) were added to refs/heads/top-sql by this push:
new 4dd07b2 Support different slow thresholds for different db types.
4dd07b2 is described below
commit 4dd07b2ed735d9378db5449deb6366acaace4325
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Sun Feb 10 23:58:03 2019 +0800
Support different slow thresholds for different db types.
---
docker/config/application.yml | 1 +
...eModuleConfig.java => DBLatencyThresholds.java} | 44 +++++++++++++---------
.../trace/provider/TraceModuleProvider.java | 17 +++------
.../trace/provider/TraceServiceModuleConfig.java | 9 ++---
.../receiver/trace/provider/parser/SpanTags.java | 2 +
.../listener/endpoint/MultiScopesSpanListener.java | 20 +++++++---
.../src/main/assembly/application.yml | 1 +
.../src/main/resources/application.yml | 1 +
8 files changed, 55 insertions(+), 40 deletions(-)
diff --git a/docker/config/application.yml b/docker/config/application.yml
index 1a13b4c..f9b645f 100644
--- a/docker/config/application.yml
+++ b/docker/config/application.yml
@@ -75,6 +75,7 @@ receiver-trace:
bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
+ slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,redis:50} # The slow database access thresholds. Unit ms.
receiver-jvm:
default:
service-mesh:
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/DBLatencyThresholds.java
similarity index 50%
copy from oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java
copy to oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/DBLatencyThresholds.java
index fec00e2..55aab89 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/DBLatencyThresholds.java
@@ -18,26 +18,34 @@
package org.apache.skywalking.oap.server.receiver.trace.provider;
-import lombok.*;
-import org.apache.skywalking.oap.server.library.module.ModuleConfig;
+import java.util.*;
/**
- * @author peng-yongsheng
+ * @author wusheng
*/
-public class TraceServiceModuleConfig extends ModuleConfig {
- @Setter @Getter private String bufferPath;
- @Setter @Getter private int bufferOffsetMaxFileSize;
- @Setter @Getter private int bufferDataMaxFileSize;
- @Setter @Getter private boolean bufferFileCleanWhenRestart;
- /**
- * The sample rate precision is 1/10000.
- * 10000 means 100% sample in default.
- */
- @Setter @Getter private int sampleRate = 10000;
+public class DBLatencyThresholds {
+ private Map<String, Integer> thresholds;
- /**
- * The threshold used to check the slow database access.
- * Unit, millisecond.
- */
- @Setter @Getter private int slowDBAccessThreshold = 200;
+ DBLatencyThresholds(String config) {
+ thresholds = new HashMap<>();
+ String[] settings = config.split(",");
+ for (String setting : settings) {
+ String[] typeValue = setting.split(":");
+ if (typeValue.length == 2) {
+ thresholds.put(typeValue[0].toLowerCase(), Integer.parseInt(typeValue[1]));
+ }
+ }
+ if (thresholds.containsKey("default")) {
+ thresholds.put("default", 10000);
+ }
+ }
+
+ public int getThreshold(String type) {
+ type = type.toLowerCase();
+ if (thresholds.containsKey(type)) {
+ return thresholds.get(type);
+ } else {
+ return thresholds.get("default");
+ }
+ }
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
index 65c9179..367702d 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
@@ -20,22 +20,13 @@ package org.apache.skywalking.oap.server.receiver.trace.provider;
import java.io.IOException;
import org.apache.skywalking.oap.server.core.CoreModule;
-import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
-import org.apache.skywalking.oap.server.core.server.JettyHandlerRegister;
-import org.apache.skywalking.oap.server.library.module.ModuleConfig;
-import org.apache.skywalking.oap.server.library.module.ModuleDefine;
-import org.apache.skywalking.oap.server.library.module.ModuleProvider;
-import org.apache.skywalking.oap.server.library.module.ModuleStartException;
-import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
+import org.apache.skywalking.oap.server.core.server.*;
+import org.apache.skywalking.oap.server.library.module.*;
import org.apache.skywalking.oap.server.receiver.trace.module.TraceModule;
import org.apache.skywalking.oap.server.receiver.trace.provider.handler.v5.grpc.TraceSegmentServiceHandler;
import org.apache.skywalking.oap.server.receiver.trace.provider.handler.v5.rest.TraceSegmentServletHandler;
import org.apache.skywalking.oap.server.receiver.trace.provider.handler.v6.grpc.TraceSegmentReportServiceHandler;
-import org.apache.skywalking.oap.server.receiver.trace.provider.parser.ISegmentParserService;
-import org.apache.skywalking.oap.server.receiver.trace.provider.parser.SegmentParse;
-import org.apache.skywalking.oap.server.receiver.trace.provider.parser.SegmentParseV2;
-import org.apache.skywalking.oap.server.receiver.trace.provider.parser.SegmentParserListenerManager;
-import org.apache.skywalking.oap.server.receiver.trace.provider.parser.SegmentParserServiceImpl;
+import org.apache.skywalking.oap.server.receiver.trace.provider.parser.*;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.endpoint.MultiScopesSpanListener;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.segment.SegmentSpanListener;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.service.ServiceMappingSpanListener;
@@ -68,6 +59,8 @@ public class TraceModuleProvider extends ModuleProvider {
}
@Override public void prepare() throws ServiceNotProvidedException {
+ moduleConfig.setDbLatencyThresholds(new DBLatencyThresholds(moduleConfig.getSlowDBAccessThreshold()));
+
SegmentParserListenerManager listenerManager = new SegmentParserListenerManager();
listenerManager.add(new MultiScopesSpanListener.Factory());
listenerManager.add(new ServiceMappingSpanListener.Factory());
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 fec00e2..8ebeec6 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
@@ -30,14 +30,13 @@ public class TraceServiceModuleConfig extends ModuleConfig {
@Setter @Getter private int bufferDataMaxFileSize;
@Setter @Getter private boolean bufferFileCleanWhenRestart;
/**
- * The sample rate precision is 1/10000.
- * 10000 means 100% sample in default.
+ * The sample rate precision is 1/10000. 10000 means 100% sample in default.
*/
@Setter @Getter private int sampleRate = 10000;
/**
- * The threshold used to check the slow database access.
- * Unit, millisecond.
+ * The threshold used to check the slow database access. Unit, millisecond.
*/
- @Setter @Getter private int slowDBAccessThreshold = 200;
+ @Setter @Getter private String slowDBAccessThreshold = "default:200";
+ @Setter @Getter private DBLatencyThresholds dbLatencyThresholds;
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java
index e9f0c68..0f9fef0 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SpanTags.java
@@ -20,4 +20,6 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser;
public class SpanTags {
public static final String DB_STATEMENT = "db.statement";
+
+ public static final String DB_TYPE = "db.type";
}
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 4b970fe..0330e77 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
@@ -26,7 +26,7 @@ import org.apache.skywalking.oap.server.core.cache.*;
import org.apache.skywalking.oap.server.core.source.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
-import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModuleConfig;
+import org.apache.skywalking.oap.server.receiver.trace.provider.*;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.SpanTags;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.*;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.*;
@@ -148,8 +148,9 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
setPublicAttrs(sourceBuilder, spanDecorator);
exitSourceBuilders.add(sourceBuilder);
- if (sourceBuilder.getType().equals(RequestType.DATABASE)
- && sourceBuilder.getLatency() > config.getSlowDBAccessThreshold()) {
+ if (sourceBuilder.getType().equals(RequestType.DATABASE)) {
+ boolean isSlowDBAccess = false;
+
DatabaseSlowStatement statement = new DatabaseSlowStatement();
statement.setId(segmentCoreInfo.getSegmentId() + "-" + spanDecorator.getSpanId());
statement.setDatabaseServiceId(sourceBuilder.getDestServiceId());
@@ -159,11 +160,20 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
for (KeyStringValuePair tag : spanDecorator.getAllTags()) {
if (SpanTags.DB_STATEMENT.equals(tag.getKey())) {
statement.setStatement(tag.getValue());
- slowDatabaseAccesses.add(statement);
- break;
+
+ } else if (SpanTags.DB_TYPE.equals(tag.getKey())) {
+ String dbType = tag.getValue();
+ DBLatencyThresholds thresholds = config.getDbLatencyThresholds();
+ int threshold = thresholds.getThreshold(dbType);
+ if (sourceBuilder.getLatency() > threshold) {
+ isSlowDBAccess = true;
+ }
}
}
+ if (isSlowDBAccess) {
+ slowDatabaseAccesses.add(statement);
+ }
}
}
diff --git a/oap-server/server-starter/src/main/assembly/application.yml b/oap-server/server-starter/src/main/assembly/application.yml
index 746de62..840777d 100644
--- a/oap-server/server-starter/src/main/assembly/application.yml
+++ b/oap-server/server-starter/src/main/assembly/application.yml
@@ -75,6 +75,7 @@ receiver-trace:
bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
+ slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,redis:50} # The slow database access thresholds. Unit ms.
receiver-jvm:
default:
#service-mesh:
diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml
index 5b53d73..28c7b97 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -75,6 +75,7 @@ receiver-trace:
bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit is MB
bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
+ slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,redis:50} # The slow database access thresholds. Unit ms.
receiver-jvm:
default:
service-mesh: