in sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetryMetrics.java [930:1150]
private void recordStoreResponseStatistics(
CosmosDiagnosticsContext ctx,
CosmosAsyncClient client,
Collection<ClientSideRequestStatistics.StoreResponseStatistics> storeResponseStatistics,
int actualItemCount,
long opCountPerEvaluation,
long opRetriedCountPerEvaluation,
long globalOpCount,
int targetMaxMicroBatchSize) {
if (!this.metricCategories.contains(MetricCategory.RequestSummary)) {
return;
}
for (ClientSideRequestStatistics.StoreResponseStatistics responseStatistics: storeResponseStatistics) {
StoreResultDiagnostics storeResultDiagnostics = responseStatistics.getStoreResult();
StoreResponseDiagnostics storeResponseDiagnostics =
storeResultDiagnostics.getStoreResponseDiagnostics();
Tags requestTags = operationTags.and(
createRequestTags(
metricTagNames,
storeResponseDiagnostics.getPartitionKeyRangeId(),
storeResponseDiagnostics.getStatusCode(),
storeResponseDiagnostics.getSubStatusCode(),
responseStatistics.getRequestResourceType().toString(),
responseStatistics.getRequestOperationType().toString(),
responseStatistics.getRegionName(),
storeResultDiagnostics.getStorePhysicalAddressEscapedAuthority(),
storeResultDiagnostics.getStorePhysicalAddressEscapedPath())
);
Double backendLatency = storeResultDiagnostics.getBackendLatencyInMs();
if (backendLatency != null) {
CosmosMeterOptions beLatencyOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_BACKEND_LATENCY);
if (beLatencyOptions.isEnabled() &&
(!beLatencyOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
DistributionSummary backendRequestLatencyMeter = DistributionSummary
.builder(beLatencyOptions.getMeterName().toString())
.baseUnit("ms")
.description("Backend service latency")
.maximumExpectedValue(6_000d)
.publishPercentiles(beLatencyOptions.getPercentiles())
.publishPercentileHistogram(beLatencyOptions.isHistogramPublishingEnabled())
.tags(getEffectiveTags(requestTags, beLatencyOptions))
.register(compositeRegistry);
backendRequestLatencyMeter.record(storeResultDiagnostics.getBackendLatencyInMs());
}
}
CosmosMeterOptions ruOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_REQUEST_CHARGE);
if (ruOptions.isEnabled() &&
(!ruOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
double requestCharge = storeResponseDiagnostics.getRequestCharge();
DistributionSummary requestChargeMeter = DistributionSummary
.builder(ruOptions.getMeterName().toString())
.baseUnit("RU (request unit)")
.description("RNTBD Request RU charge")
.maximumExpectedValue(100_000d)
.publishPercentiles(ruOptions.getPercentiles())
.publishPercentileHistogram(ruOptions.isHistogramPublishingEnabled())
.tags(getEffectiveTags(requestTags, ruOptions))
.register(compositeRegistry);
requestChargeMeter.record(Math.min(requestCharge, 100_000d));
}
CosmosMeterOptions latencyOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_LATENCY);
if (latencyOptions.isEnabled() &&
(!latencyOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
Duration latency = responseStatistics.getDuration();
if (latency != null) {
Timer requestLatencyMeter = Timer
.builder(latencyOptions.getMeterName().toString())
.description("RNTBD Request latency")
.maximumExpectedValue(Duration.ofSeconds(6))
.publishPercentiles(latencyOptions.getPercentiles())
.publishPercentileHistogram(latencyOptions.isHistogramPublishingEnabled())
.tags(getEffectiveTags(requestTags, latencyOptions))
.register(compositeRegistry);
requestLatencyMeter.record(latency);
}
}
CosmosMeterOptions reqOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_REQUESTS);
if (reqOptions.isEnabled() &&
(!reqOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
Counter requestCounter = Counter
.builder(reqOptions.getMeterName().toString())
.baseUnit("requests")
.description("RNTBD requests")
.tags(getEffectiveTags(requestTags, reqOptions))
.register(compositeRegistry);
requestCounter.increment();
}
CosmosMeterOptions actualItemCountOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_ACTUAL_ITEM_COUNT);
if (actualItemCountOptions.isEnabled()
&& (!actualItemCountOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
DistributionSummary actualItemCountMeter = DistributionSummary
.builder(actualItemCountOptions.getMeterName().toString())
.baseUnit("item count")
.description("Rntbd response actual item count")
.maximumExpectedValue(100_000d)
.publishPercentiles()
.publishPercentileHistogram(false)
.tags(getEffectiveTags(requestTags, actualItemCountOptions))
.register(compositeRegistry);
actualItemCountMeter.record(Math.max(0, Math.min(actualItemCount, 100_000d)));
}
CosmosMeterOptions opCountPerEvaluationOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_BULK_OP_COUNT_PER_EVALUATION
);
if (opCountPerEvaluationOptions.isEnabled()
&& (!opCountPerEvaluationOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
DistributionSummary opCountPerEvaluationMeter = DistributionSummary
.builder(opCountPerEvaluationOptions.getMeterName().toString())
.baseUnit("item count")
.description("Operation count per evaluation")
.maximumExpectedValue(Double.MAX_VALUE)
.publishPercentiles()
.publishPercentileHistogram(false)
.tags(getEffectiveTags(requestTags, opCountPerEvaluationOptions))
.register(compositeRegistry);
opCountPerEvaluationMeter.record(Math.max(0, Math.min(opCountPerEvaluation, Double.MAX_VALUE)));
}
CosmosMeterOptions opRetriedCountPerEvaluationOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_BULK_OP_RETRIED_COUNT_PER_EVALUATION
);
if (opRetriedCountPerEvaluationOptions.isEnabled()
&& (!opRetriedCountPerEvaluationOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
DistributionSummary opRetriedCountPerEvaluationMeter = DistributionSummary
.builder(opRetriedCountPerEvaluationOptions.getMeterName().toString())
.baseUnit("item count")
.description("Operation retried count per evaluation")
.maximumExpectedValue(Double.MAX_VALUE)
.publishPercentiles()
.publishPercentileHistogram(false)
.tags(getEffectiveTags(requestTags, opRetriedCountPerEvaluationOptions))
.register(compositeRegistry);
opRetriedCountPerEvaluationMeter.record(Math.max(0, Math.min(opRetriedCountPerEvaluation, Double.MAX_VALUE)));
}
CosmosMeterOptions globalOpCountOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_BULK_GLOBAL_OP_COUNT
);
if (globalOpCountOptions.isEnabled()
&& (!globalOpCountOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
DistributionSummary globalOpCountMeter = DistributionSummary
.builder(globalOpCountOptions.getMeterName().toString())
.baseUnit("item count")
.description("Global operation count")
.maximumExpectedValue(Double.MAX_VALUE)
.publishPercentiles()
.publishPercentileHistogram(false)
.tags(getEffectiveTags(requestTags, globalOpCountOptions))
.register(compositeRegistry);
globalOpCountMeter.record(Math.max(0, Math.min(globalOpCount, Double.MAX_VALUE)));
}
CosmosMeterOptions targetMaxMicroBatchSizeOptions = clientAccessor.getMeterOptions(
client,
CosmosMetricName.REQUEST_SUMMARY_DIRECT_BULK_TARGET_MAX_MICRO_BATCH_SIZE
);
if (targetMaxMicroBatchSizeOptions.isEnabled()
&& (!targetMaxMicroBatchSizeOptions.isDiagnosticThresholdsFilteringEnabled() || ctx.isThresholdViolated())) {
DistributionSummary targetMaxMicroBatchSizeMeter = DistributionSummary
.builder(targetMaxMicroBatchSizeOptions.getMeterName().toString())
.baseUnit("item count")
.description("Target max micro batch size")
.maximumExpectedValue(101d)
.publishPercentiles()
.publishPercentileHistogram(false)
.tags(getEffectiveTags(requestTags, targetMaxMicroBatchSizeOptions))
.register(compositeRegistry);
targetMaxMicroBatchSizeMeter.record(Math.max(0, Math.min(targetMaxMicroBatchSize, 101d)));
}
if (this.metricCategories.contains(MetricCategory.RequestDetails)) {
recordRequestTimeline(
ctx,
client,
CosmosMetricName.REQUEST_DETAILS_DIRECT_TIMELINE,
storeResponseDiagnostics.getRequestTimeline(), requestTags);
}
recordRequestPayloadSizes(
ctx,
client,
storeResponseDiagnostics.getRequestPayloadLength(),
storeResponseDiagnostics.getResponsePayloadLength()
);
recordRntbdEndpointStatistics(
client,
storeResponseDiagnostics.getRntbdEndpointStatistics(),
requestTags);
}
}