Update default histogram buckets for gRPC server latency measurements (#17777)

* Update default histogram buckets for gRPC server latency measurements
This commit is contained in:
Thibault Jeandet 2023-11-13 15:34:27 +01:00 committed by GitHub
parent 9b70a112b1
commit 7b6b97abe6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 8 deletions

View File

@ -5,43 +5,47 @@ package com.daml.metrics.grpc
import com.daml.metrics.api.MetricHandle.{Histogram, LabeledMetricsFactory}
import com.daml.metrics.api.{MetricHandle, MetricName, MetricsContext}
import com.daml.metrics.grpc.DamlGrpcServerMetrics.GrpcServerMetricsPrefix
object DamlGrpcServerMetrics {
val GrpcServerMetricsPrefix = MetricName.Daml :+ "grpc" :+ "server"
}
class DamlGrpcServerMetrics(
metricsFactory: LabeledMetricsFactory,
component: String,
) extends GrpcServerMetrics {
private val grpcServerMetricsPrefix = MetricName.Daml :+ "grpc" :+ "server"
private implicit val metricsContext: MetricsContext = MetricsContext(
Map("service" -> component)
)
override val callTimer: MetricHandle.Timer = metricsFactory.timer(
grpcServerMetricsPrefix,
GrpcServerMetricsPrefix,
"Distribution of the durations of serving gRPC requests.",
)
override val messagesSent: MetricHandle.Meter = metricsFactory.meter(
grpcServerMetricsPrefix :+ "messages" :+ "sent",
GrpcServerMetricsPrefix :+ "messages" :+ "sent",
"Total number of gRPC messages sent (on either type of connection).",
)
override val messagesReceived: MetricHandle.Meter = metricsFactory.meter(
grpcServerMetricsPrefix :+ "messages" :+ "received",
GrpcServerMetricsPrefix :+ "messages" :+ "received",
"Total number of gRPC messages received (on either type of connection).",
)
override val messagesSentSize: MetricHandle.Histogram = metricsFactory.histogram(
grpcServerMetricsPrefix :+ "messages" :+ "sent" :+ Histogram.Bytes,
GrpcServerMetricsPrefix :+ "messages" :+ "sent" :+ Histogram.Bytes,
"Distribution of payload sizes in gRPC messages sent (both unary and streaming).",
)
override val messagesReceivedSize: MetricHandle.Histogram = metricsFactory.histogram(
grpcServerMetricsPrefix :+ "messages" :+ "received" :+ Histogram.Bytes,
GrpcServerMetricsPrefix :+ "messages" :+ "received" :+ Histogram.Bytes,
"Distribution of payload sizes in gRPC messages received (both unary and streaming).",
)
override val callsStarted: MetricHandle.Meter = metricsFactory.meter(
grpcServerMetricsPrefix :+ "started",
GrpcServerMetricsPrefix :+ "started",
"Total number of started gRPC requests (on either type of connection).",
)
override val callsHandled: MetricHandle.Meter = metricsFactory.meter(
grpcServerMetricsPrefix :+ "handled",
GrpcServerMetricsPrefix :+ "handled",
"Total number of handled gRPC requests.",
)

View File

@ -9,6 +9,7 @@ import com.daml.metrics.api.MetricHandle.Histogram
import com.daml.metrics.api.opentelemetry.OpenTelemetryTimer
import com.daml.metrics.api.reporters.MetricsReporter
import com.daml.metrics.api.reporters.MetricsReporter.Prometheus
import com.daml.metrics.grpc.DamlGrpcServerMetrics
import com.daml.telemetry.OpenTelemetryOwner.addViewsToProvider
import io.opentelemetry.api.OpenTelemetry
import io.opentelemetry.exporter.prometheus.PrometheusCollector
@ -91,6 +92,18 @@ object OpenTelemetryOwner {
)
),
)
// timing buckets for gRPC server latency measurements with more precise granularity on latencies up to 5s
.registerView(
histogramSelectorWithRegex(
s"${DamlGrpcServerMetrics.GrpcServerMetricsPrefix}.*${OpenTelemetryTimer.TimerUnitAndSuffix}"
),
explicitHistogramBucketsView(
Seq(
0.01d, 0.025d, 0.050d, 0.075d, 0.1d, 0.15d, 0.2d, 0.25d, 0.35d, 0.5d, 0.75d, 1d, 1.25d,
1.5d, 1.75d, 2d, 2.25d, 2.5d, 2.75d, 3d, 3.5d, 4d, 4.5d, 5d, 10d,
)
),
)
// generic timing buckets
.registerView(
histogramSelectorWithRegex(s".*${OpenTelemetryTimer.TimerUnitAndSuffix}"),