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 2020/08/05 06:29:46 UTC
[skywalking] 01/01: Make the column length of slow DB statement
having the good default value.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch stat-length
in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 423726137d17d3989c0b8188c8583a553e085dba
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Wed Aug 5 14:29:16 2020 +0800
Make the column length of slow DB statement having the good default value.
---
.../analyzer/provider/AnalyzerModuleConfig.java | 4 +++-
.../manual/database/TopNDatabaseStatement.java | 7 ++++++-
.../oap/server/core/analysis/topn/TopN.java | 6 +-----
.../oap/server/core/storage/annotation/Column.java | 8 ++++++++
.../server/core/storage/model/StorageModels.java | 21 ++++++++++++++++++---
5 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleConfig.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleConfig.java
index 0b005f3..84d3b6d 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleConfig.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/AnalyzerModuleConfig.java
@@ -68,7 +68,9 @@ public class AnalyzerModuleConfig extends ModuleConfig {
@Getter
private boolean traceAnalysis = true;
/**
- * Slow Sql string length can't beyond this limit
+ * Slow Sql string length can't beyond this limit. This value should be as same as the length annotation at the
+ * {@code org.apache.skywalking.oap.server.core.analysis.manual.database.TopNDatabaseStatement#statement}. And share
+ * the system env name, SW_SLOW_DB_THRESHOLD
*/
@Setter
@Getter
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java
index df203c3..77672de 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/database/TopNDatabaseStatement.java
@@ -21,23 +21,28 @@ package org.apache.skywalking.oap.server.core.analysis.manual.database;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
+import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.analysis.Stream;
import org.apache.skywalking.oap.server.core.analysis.topn.TopN;
import org.apache.skywalking.oap.server.core.analysis.worker.TopNStreamProcessor;
import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.annotation.Column;
/**
* Database TopN statement, including Database SQL statement, mongoDB and Redis commands.
*/
@Stream(name = TopNDatabaseStatement.INDEX_NAME, scopeId = DefaultScopeDefine.DATABASE_SLOW_STATEMENT, builder = TopNDatabaseStatement.Builder.class, processor = TopNStreamProcessor.class)
public class TopNDatabaseStatement extends TopN {
-
public static final String INDEX_NAME = "top_n_database_statement";
@Setter
private String id;
+ @Getter
+ @Setter
+ @Column(columnName = STATEMENT, length = 2000, lengthEnvVariable = "SW_SLOW_DB_THRESHOLD", storageOnly = true)
+ private String statement;
@Override
public String id() {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java
index 4ec3763..8a4d7b9 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java
@@ -32,11 +32,7 @@ public abstract class TopN extends Record implements ComparableStorageData {
public static final String LATENCY = "latency";
public static final String TRACE_ID = "trace_id";
public static final String SERVICE_ID = "service_id";
-
- @Getter
- @Setter
- @Column(columnName = STATEMENT, storageOnly = true)
- private String statement;
+
@Getter
@Setter
@Column(columnName = LATENCY, dataType = Column.ValueDataType.SAMPLED_RECORD)
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java
index 370e132..bda1d3b 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java
@@ -70,6 +70,14 @@ public @interface Column {
int length() default 200;
/**
+ * The return name of system environment could provide an override value of the length limitation.
+ * @return the variable name of system environment.
+ *
+ * @since 8.2.0
+ */
+ String lengthEnvVariable() default "";
+
+ /**
* Column with data type != {@link ValueDataType#NOT_VALUE} represents this is a value column. Indicate it would be
* queried by UI/CLI.
*
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
index 3a8773c..6000a93 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
@@ -23,9 +23,8 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
-
import lombok.extern.slf4j.Slf4j;
-
+import org.apache.skywalking.apm.util.StringUtil;
import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
import org.apache.skywalking.oap.server.core.storage.StorageException;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
@@ -105,10 +104,26 @@ public class StorageModels implements IModelManager, ModelCreator, ModelManipula
for (Field field : fields) {
if (field.isAnnotationPresent(Column.class)) {
Column column = field.getAnnotation(Column.class);
+ // Use the column#length as the default column length, as read the system env as the override mechanism.
+ // Log the error but don't block the startup sequence.
+ int columnLength = column.length();
+ final String lengthEnvVariable = column.lengthEnvVariable();
+ if (StringUtil.isNotEmpty(lengthEnvVariable)) {
+ final String envValue = System.getenv(lengthEnvVariable);
+ if (StringUtil.isNotEmpty(envValue)) {
+ try {
+ columnLength = Integer.parseInt(envValue);
+ } catch (NumberFormatException e) {
+ log.error("Model [{}] Column [{}], illegal value {} of column length from system env [{}]",
+ modelName, column.columnName(), envValue, lengthEnvVariable
+ );
+ }
+ }
+ }
modelColumns.add(
new ModelColumn(
new ColumnName(modelName, column.columnName()), field.getType(), column.matchQuery(),
- column.storageOnly(), column.dataType().isValue(), column.length()
+ column.storageOnly(), column.dataType().isValue(), columnLength
));
if (log.isDebugEnabled()) {
log.debug("The field named {} with the {} type", column.columnName(), field.getType());