Skip to content

Commit 34f3b5b

Browse files
Merge pull request #67 from Azure-Samples/use_cosmos_client_telemetry_for_diagnostics
Use cosmos client telemetry for diagnostics
2 parents c8255a3 + 6df4677 commit 34f3b5b

File tree

3 files changed

+71
-2
lines changed

3 files changed

+71
-2
lines changed

src/main/java/com/azure/cosmos/examples/diagnostics/async/CosmosDiagnosticsQuickStartAsync.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@
33

44
package com.azure.cosmos.examples.diagnostics.async;
55

6+
import com.azure.core.util.Context;
67
import com.azure.cosmos.ConsistencyLevel;
78
import com.azure.cosmos.CosmosAsyncClient;
89
import com.azure.cosmos.CosmosAsyncContainer;
910
import com.azure.cosmos.CosmosAsyncDatabase;
1011
import com.azure.cosmos.CosmosClientBuilder;
1112
import com.azure.cosmos.CosmosDiagnostics;
13+
import com.azure.cosmos.CosmosDiagnosticsContext;
14+
import com.azure.cosmos.CosmosDiagnosticsHandler;
15+
import com.azure.cosmos.CosmosDiagnosticsThresholds;
1216
import com.azure.cosmos.CosmosException;
1317
import com.azure.cosmos.examples.common.AccountSettings;
1418
import com.azure.cosmos.examples.common.Family;
19+
import com.azure.cosmos.models.CosmosClientTelemetryConfig;
1520
import com.azure.cosmos.models.CosmosContainerProperties;
1621
import com.azure.cosmos.models.CosmosContainerResponse;
1722
import com.azure.cosmos.models.CosmosDatabaseRequestOptions;
@@ -26,6 +31,7 @@
2631
import org.slf4j.LoggerFactory;
2732
import reactor.core.publisher.Mono;
2833

34+
import java.time.Duration;
2935
import java.util.UUID;
3036

3137
public class CosmosDiagnosticsQuickStartAsync {
@@ -65,12 +71,40 @@ private void diagnosticsDemo() throws Exception {
6571

6672
logger.info("Using Azure Cosmos DB endpoint: {}", AccountSettings.HOST);
6773

68-
// Create sync client
74+
// Create diagnostics threshold
75+
CosmosDiagnosticsThresholds cosmosDiagnosticsThresholds = new CosmosDiagnosticsThresholds();
76+
// These thresholds are for demo purposes
77+
// NOTE: Do not use the same thresholds for production
78+
cosmosDiagnosticsThresholds.setPayloadSizeThreshold(100_00);
79+
cosmosDiagnosticsThresholds.setPointOperationLatencyThreshold(Duration.ofSeconds(1));
80+
cosmosDiagnosticsThresholds.setNonPointOperationLatencyThreshold(Duration.ofSeconds(5));
81+
cosmosDiagnosticsThresholds.setRequestChargeThreshold(100f);
82+
83+
// By default, DEFAULT_LOGGING_HANDLER can be used
84+
CosmosDiagnosticsHandler cosmosDiagnosticsHandler = CosmosDiagnosticsHandler.DEFAULT_LOGGING_HANDLER;
85+
86+
// App developers can also define their own diagnostics handler
87+
cosmosDiagnosticsHandler = new CosmosDiagnosticsHandler() {
88+
@Override
89+
public void handleDiagnostics(CosmosDiagnosticsContext diagnosticsContext, Context traceContext) {
90+
logger.info("This is custom diagnostics handler: {}", diagnosticsContext.toJson());
91+
}
92+
};
93+
94+
95+
// Create Client Telemetry Config
96+
CosmosClientTelemetryConfig cosmosClientTelemetryConfig =
97+
new CosmosClientTelemetryConfig();
98+
cosmosClientTelemetryConfig.diagnosticsHandler(cosmosDiagnosticsHandler);
99+
cosmosClientTelemetryConfig.diagnosticsThresholds(cosmosDiagnosticsThresholds);
100+
101+
// Create async client
69102
client = new CosmosClientBuilder()
70103
.endpoint(AccountSettings.HOST)
71104
.key(AccountSettings.MASTER_KEY)
72105
.consistencyLevel(ConsistencyLevel.EVENTUAL)
73106
.contentResponseOnWriteEnabled(true)
107+
.clientTelemetryConfig(cosmosClientTelemetryConfig)
74108
.buildAsyncClient();
75109

76110

src/main/java/com/azure/cosmos/examples/diagnostics/sync/CosmosDiagnosticsQuickStart.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@
33

44
package com.azure.cosmos.examples.diagnostics.sync;
55

6+
import com.azure.core.util.Context;
67
import com.azure.cosmos.ConsistencyLevel;
78
import com.azure.cosmos.CosmosClient;
89
import com.azure.cosmos.CosmosClientBuilder;
910
import com.azure.cosmos.CosmosContainer;
1011
import com.azure.cosmos.CosmosDatabase;
1112
import com.azure.cosmos.CosmosDiagnostics;
13+
import com.azure.cosmos.CosmosDiagnosticsContext;
14+
import com.azure.cosmos.CosmosDiagnosticsHandler;
15+
import com.azure.cosmos.CosmosDiagnosticsThresholds;
1216
import com.azure.cosmos.CosmosException;
1317
import com.azure.cosmos.examples.common.AccountSettings;
1418
import com.azure.cosmos.examples.common.Family;
19+
import com.azure.cosmos.models.CosmosClientTelemetryConfig;
1520
import com.azure.cosmos.models.CosmosContainerProperties;
1621
import com.azure.cosmos.models.CosmosContainerResponse;
1722
import com.azure.cosmos.models.CosmosDatabaseRequestOptions;
@@ -25,6 +30,7 @@
2530
import org.slf4j.Logger;
2631
import org.slf4j.LoggerFactory;
2732

33+
import java.time.Duration;
2834
import java.util.UUID;
2935

3036
public class CosmosDiagnosticsQuickStart {
@@ -64,12 +70,41 @@ private void diagnosticsDemo() throws Exception {
6470

6571
logger.info("Using Azure Cosmos DB endpoint: {}", AccountSettings.HOST);
6672

73+
// Create diagnostics threshold
74+
CosmosDiagnosticsThresholds cosmosDiagnosticsThresholds = new CosmosDiagnosticsThresholds();
75+
// These thresholds are for demo purposes
76+
// NOTE: Do not use the same thresholds for production
77+
cosmosDiagnosticsThresholds.setPayloadSizeThreshold(100_00);
78+
cosmosDiagnosticsThresholds.setPointOperationLatencyThreshold(Duration.ofSeconds(1));
79+
cosmosDiagnosticsThresholds.setNonPointOperationLatencyThreshold(Duration.ofSeconds(5));
80+
cosmosDiagnosticsThresholds.setRequestChargeThreshold(100f);
81+
82+
// By default, DEFAULT_LOGGING_HANDLER can be used
83+
CosmosDiagnosticsHandler cosmosDiagnosticsHandler = CosmosDiagnosticsHandler.DEFAULT_LOGGING_HANDLER;
84+
85+
// App developers can also define their own diagnostics handler
86+
cosmosDiagnosticsHandler = new CosmosDiagnosticsHandler() {
87+
@Override
88+
public void handleDiagnostics(CosmosDiagnosticsContext diagnosticsContext, Context traceContext) {
89+
logger.info("This is custom diagnostics handler: {}", diagnosticsContext.toJson());
90+
}
91+
};
92+
93+
94+
// Create Client Telemetry Config
95+
CosmosClientTelemetryConfig cosmosClientTelemetryConfig =
96+
new CosmosClientTelemetryConfig();
97+
cosmosClientTelemetryConfig.diagnosticsHandler(cosmosDiagnosticsHandler);
98+
cosmosClientTelemetryConfig.diagnosticsThresholds(cosmosDiagnosticsThresholds);
99+
100+
67101
// Create sync client
68102
client = new CosmosClientBuilder()
69103
.endpoint(AccountSettings.HOST)
70104
.key(AccountSettings.MASTER_KEY)
71105
.consistencyLevel(ConsistencyLevel.EVENTUAL)
72106
.contentResponseOnWriteEnabled(true)
107+
.clientTelemetryConfig(cosmosClientTelemetryConfig)
73108
.buildClient();
74109

75110

src/main/resources/log4j2.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ rootLogger.appenderRef.stdout.ref=STDOUT
55
logger.netty.name=io.netty
66
logger.netty.level=OFF
77
logger.cosmos.name=com.azure.cosmos
8-
logger.cosmos.level=warn
8+
logger.cosmos.level=info
99
# STDOUT is a ConsoleAppender and uses PatternLayout.
1010
appender.console.name=STDOUT
1111
appender.console.type=Console

0 commit comments

Comments
 (0)