diff --git a/instrumentation/graphql-java/README.md b/instrumentation/graphql-java/README.md index 65693b8e5e42..ba7bb42d6712 100644 --- a/instrumentation/graphql-java/README.md +++ b/instrumentation/graphql-java/README.md @@ -4,6 +4,7 @@ |------------------------------------------------------------------------|---------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `otel.instrumentation.graphql.query-sanitizer.enabled` | Boolean | `true` | Whether to remove sensitive information from query source that is added as span attribute. | | `otel.instrumentation.graphql.add-operation-name-to-span-name.enabled` | Boolean | `false` | Whether GraphQL operation name is added to the span name.
**WARNING**: GraphQL operation name is provided by the client and can have high cardinality. Use only when the server is not exposed to malicious clients. |
+| `otel.instrumentation.graphql.capture-query` | Boolean | `true` | Whether to capture the query in `graphql.document` span attribute. |
# Settings for the GraphQL 20 instrumentation
diff --git a/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java b/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java
index 122a3b388242..79e0130d3129 100644
--- a/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java
+++ b/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java
@@ -13,6 +13,9 @@
public final class GraphqlSingletons {
+ private static final boolean CAPTURE_QUERY =
+ AgentInstrumentationConfig.get()
+ .getBoolean("otel.instrumentation.graphql.capture-query", true);
private static final boolean QUERY_SANITIZATION_ENABLED =
AgentInstrumentationConfig.get()
.getBoolean("otel.instrumentation.graphql.query-sanitizer.enabled", true);
@@ -23,6 +26,7 @@ public final class GraphqlSingletons {
private static final GraphQLTelemetry TELEMETRY =
GraphQLTelemetry.builder(GlobalOpenTelemetry.get())
+ .setCaptureQuery(CAPTURE_QUERY)
.setSanitizeQuery(QUERY_SANITIZATION_ENABLED)
.setAddOperationNameToSpanName(ADD_OPERATION_NAME_TO_SPAN_NAME)
.build();
diff --git a/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetry.java b/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetry.java
index 6b7cbb926fda..cddf7dac4d35 100644
--- a/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetry.java
+++ b/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetry.java
@@ -28,10 +28,17 @@ public static GraphQLTelemetryBuilder builder(OpenTelemetry openTelemetry) {
private final OpenTelemetryInstrumentationHelper helper;
GraphQLTelemetry(
- OpenTelemetry openTelemetry, boolean sanitizeQuery, boolean addOperationNameToSpanName) {
+ OpenTelemetry openTelemetry,
+ boolean captureQuery,
+ boolean sanitizeQuery,
+ boolean addOperationNameToSpanName) {
helper =
OpenTelemetryInstrumentationHelper.create(
- openTelemetry, INSTRUMENTATION_NAME, sanitizeQuery, addOperationNameToSpanName);
+ openTelemetry,
+ INSTRUMENTATION_NAME,
+ captureQuery,
+ sanitizeQuery,
+ addOperationNameToSpanName);
}
/**
diff --git a/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetryBuilder.java b/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetryBuilder.java
index aa2f47dc6265..adeaab18ea97 100644
--- a/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetryBuilder.java
+++ b/instrumentation/graphql-java/graphql-java-12.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v12_0/GraphQLTelemetryBuilder.java
@@ -14,6 +14,7 @@ public final class GraphQLTelemetryBuilder {
private final OpenTelemetry openTelemetry;
+ private boolean captureQuery = true;
private boolean sanitizeQuery = true;
private boolean addOperationNameToSpanName = false;
@@ -21,6 +22,16 @@ public final class GraphQLTelemetryBuilder {
this.openTelemetry = openTelemetry;
}
+ /**
+ * Sets whether query should be captured in {@code graphql.document} span attribute. Default is
+ * {@code true}.
+ */
+ @CanIgnoreReturnValue
+ public GraphQLTelemetryBuilder setCaptureQuery(boolean captureQuery) {
+ this.captureQuery = captureQuery;
+ return this;
+ }
+
/** Sets whether sensitive information should be removed from queries. Default is {@code true}. */
@CanIgnoreReturnValue
public GraphQLTelemetryBuilder setSanitizeQuery(boolean sanitizeQuery) {
@@ -45,6 +56,7 @@ public GraphQLTelemetryBuilder setAddOperationNameToSpanName(boolean addOperatio
* GraphQLTelemetryBuilder}.
*/
public GraphQLTelemetry build() {
- return new GraphQLTelemetry(openTelemetry, sanitizeQuery, addOperationNameToSpanName);
+ return new GraphQLTelemetry(
+ openTelemetry, captureQuery, sanitizeQuery, addOperationNameToSpanName);
}
}
diff --git a/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java b/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java
index ba489efeea72..99845529f985 100644
--- a/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java
+++ b/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java
@@ -13,6 +13,9 @@
public final class GraphqlSingletons {
+ private static final boolean CAPTURE_QUERY =
+ AgentInstrumentationConfig.get()
+ .getBoolean("otel.instrumentation.graphql.capture-query", true);
private static final boolean QUERY_SANITIZATION_ENABLED =
AgentInstrumentationConfig.get()
.getBoolean("otel.instrumentation.graphql.query-sanitizer.enabled", true);
@@ -29,6 +32,7 @@ public final class GraphqlSingletons {
private static final GraphQLTelemetry TELEMETRY =
GraphQLTelemetry.builder(GlobalOpenTelemetry.get())
+ .setCaptureQuery(CAPTURE_QUERY)
.setSanitizeQuery(QUERY_SANITIZATION_ENABLED)
.setDataFetcherInstrumentationEnabled(DATA_FETCHER_ENABLED)
.setTrivialDataFetcherInstrumentationEnabled(TRIVIAL_DATA_FETCHER_ENABLED)
diff --git a/instrumentation/graphql-java/graphql-java-20.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v20_0/GraphQLTelemetry.java b/instrumentation/graphql-java/graphql-java-20.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v20_0/GraphQLTelemetry.java
index 98905483858d..1c697462bbde 100644
--- a/instrumentation/graphql-java/graphql-java-20.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v20_0/GraphQLTelemetry.java
+++ b/instrumentation/graphql-java/graphql-java-20.0/library/src/main/java/io/opentelemetry/instrumentation/graphql/v20_0/GraphQLTelemetry.java
@@ -32,13 +32,14 @@ public static GraphQLTelemetryBuilder builder(OpenTelemetry openTelemetry) {
GraphQLTelemetry(
OpenTelemetry openTelemetry,
+ boolean captureQuery,
boolean sanitizeQuery,
Instrumenter