diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java index 18280dfa31606ab6dd9be4e9792c8f7e7eddd02c..376add85e5dce172f1de8b633d4725ba59632666 100755 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/conf/Config.java @@ -19,13 +19,14 @@ package org.apache.skywalking.apm.agent.core.conf; -import java.util.HashMap; -import java.util.Map; import org.apache.skywalking.apm.agent.core.context.trace.TraceSegment; import org.apache.skywalking.apm.agent.core.logging.core.LogLevel; import org.apache.skywalking.apm.agent.core.logging.core.LogOutput; import org.apache.skywalking.apm.agent.core.logging.core.WriterFactory; +import java.util.HashMap; +import java.util.Map; + /** * This is the core config in sniffer agent. * @@ -220,6 +221,14 @@ public class Config { * include parameters. */ public static boolean TRACE_PARAM = false; + + /** + * For the sake of performance, SkyWalking won't save the entire parameters string into the tag, but only + * the first {@code FILTER_LENGTH_LIMIT} characters. + * + * Set a negative number to save the complete parameter string to the tag. + */ + public static int FILTER_LENGTH_LIMIT = 256; } public static class Elasticsearch { diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoConstants.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoConstants.java index 16190572d9abf3f0d44dfd042e678cbe6ce6f62c..6230be9bc09d1d9f0f4343f82532a357c7d1c947 100644 --- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoConstants.java +++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoConstants.java @@ -31,8 +31,6 @@ public class MongoConstants { public static final String MONGO_DB_OP_PREFIX = "MongoDB/"; - public static final int FILTER_LENGTH_LIMIT = 256; - public static final String EMPTY = ""; } diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoOperationHelper.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoOperationHelper.java index c038cd5b9cab28708a600225085dbce059d78fad..ca1d41ebc8e76ad35ee425093515f89685a21724 100644 --- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoOperationHelper.java +++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/mongodb/v3/support/MongoOperationHelper.java @@ -23,7 +23,24 @@ import com.mongodb.bulk.DeleteRequest; import com.mongodb.bulk.InsertRequest; import com.mongodb.bulk.UpdateRequest; import com.mongodb.bulk.WriteRequest; -import com.mongodb.operation.*; +import com.mongodb.operation.CountOperation; +import com.mongodb.operation.CreateCollectionOperation; +import com.mongodb.operation.CreateIndexesOperation; +import com.mongodb.operation.CreateViewOperation; +import com.mongodb.operation.DeleteOperation; +import com.mongodb.operation.DistinctOperation; +import com.mongodb.operation.FindAndDeleteOperation; +import com.mongodb.operation.FindAndReplaceOperation; +import com.mongodb.operation.FindAndUpdateOperation; +import com.mongodb.operation.FindOperation; +import com.mongodb.operation.GroupOperation; +import com.mongodb.operation.InsertOperation; +import com.mongodb.operation.ListCollectionsOperation; +import com.mongodb.operation.MapReduceToCollectionOperation; +import com.mongodb.operation.MapReduceWithInlineResultsOperation; +import com.mongodb.operation.MixedBulkWriteOperation; +import com.mongodb.operation.UpdateOperation; +import org.apache.skywalking.apm.agent.core.conf.Config; import org.bson.BsonDocument; import java.util.List; @@ -111,7 +128,8 @@ public class MongoOperationHelper { } else if (request instanceof UpdateRequest) { params.append(((UpdateRequest) request).getFilter()).append(","); } - if (params.length() > MongoConstants.FILTER_LENGTH_LIMIT) { + final int filterLengthLimit = Config.Plugin.MongoDB.FILTER_LENGTH_LIMIT; + if (filterLengthLimit > 0 && params.length() > filterLengthLimit) { params.append("..."); break; } @@ -121,8 +139,9 @@ public class MongoOperationHelper { private static String limitFilter(String filter) { final StringBuilder params = new StringBuilder(); - if (filter.length() > MongoConstants.FILTER_LENGTH_LIMIT) { - return params.append(filter, 0, MongoConstants.FILTER_LENGTH_LIMIT).append("...").toString(); + final int filterLengthLimit = Config.Plugin.MongoDB.FILTER_LENGTH_LIMIT; + if (filterLengthLimit > 0 && filter.length() > filterLengthLimit) { + return params.append(filter, 0, filterLengthLimit).append("...").toString(); } else { return filter; } diff --git a/docs/en/setup/service-agent/java-agent/README.md b/docs/en/setup/service-agent/java-agent/README.md index 979837a4792db2284327a405d981fdae917cf74b..5db8bc737463b53aa47867bba72acdf94981d77f 100755 --- a/docs/en/setup/service-agent/java-agent/README.md +++ b/docs/en/setup/service-agent/java-agent/README.md @@ -97,6 +97,7 @@ property key | Description | Default | `dictionary.endpoint_name_buffer_size`|The buffer size of endpoint names and peer|`1000 * 10000`| `plugin.peer_max_length `|Peer maximum description limit.|`200`| `plugin.mongodb.trace_param`|If true, trace all the parameters in MongoDB access, default is false. Only trace the operation, not include parameters.|`false`| +`plugin.mongodb.filter_length_limit`|If set to positive number, the `WriteRequest.params` would be truncated to this length, otherwise it would be completely saved, which may cause performance problem.|`256`| `plugin.elasticsearch.trace_dsl`|If true, trace all the DSL(Domain Specific Language) in ElasticSearch access, default is false.|`false`| `plugin.springmvc.use_qualified_name_as_endpoint_name`|If true, the fully qualified method name will be used as the endpoint name instead of the request URL, default is false.|`false`| `plugin.toolit.use_qualified_name_as_operation_name`|If true, the fully qualified method name will be used as the operation name instead of the given operation name, default is false.|`false`|