From a2d2b9876d7b3347741aff44db9167932c205d68 Mon Sep 17 00:00:00 2001 From: WangGuan Date: Tue, 6 Jun 2023 15:41:48 +0800 Subject: [PATCH] feat: request succeed total --- metrics/prometheus/after_invocation.go | 5 +++++ metrics/prometheus/common.go | 4 ++++ metrics/prometheus/constant.go | 1 + metrics/prometheus/metric_set.go | 8 ++++++++ metrics/prometheus/reporter.go | 14 +++++++++++--- metrics/prometheus/reporter_test.go | 3 +++ 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/metrics/prometheus/after_invocation.go b/metrics/prometheus/after_invocation.go index d8a79df558..bfc13cbcb5 100644 --- a/metrics/prometheus/after_invocation.go +++ b/metrics/prometheus/after_invocation.go @@ -41,4 +41,9 @@ func (reporter *PrometheusReporter) ReportAfterInvocation(ctx context.Context, i reporter.reportRTSummaryVec(role, &labels, cost.Milliseconds()) reporter.reportRequestsTotalCounterVec(role, &labels) reporter.decRequestsProcessingGaugeVec(role, &labels) + + if res != nil && res.Error() == nil { + // succeed + reporter.incRequestsSucceedTotalCounterVec(role, &labels) + } } diff --git a/metrics/prometheus/common.go b/metrics/prometheus/common.go index e89c28e51d..edefc2c08f 100644 --- a/metrics/prometheus/common.go +++ b/metrics/prometheus/common.go @@ -33,6 +33,10 @@ import ( "dubbo.apache.org/dubbo-go/v3/common/constant" ) +var ( + defaultHistogramBucket = []float64{10, 50, 100, 200, 500, 1000, 10000} +) + func buildLabels(url *common.URL) prometheus.Labels { return prometheus.Labels{ applicationNameKey: url.GetParam(constant.ApplicationKey, ""), diff --git a/metrics/prometheus/constant.go b/metrics/prometheus/constant.go index 1998db9c80..95e090d466 100644 --- a/metrics/prometheus/constant.go +++ b/metrics/prometheus/constant.go @@ -43,4 +43,5 @@ const ( totalField = "total" processingField = "processing" + succeedField = "succeed" ) diff --git a/metrics/prometheus/metric_set.go b/metrics/prometheus/metric_set.go index 8dc9afbfb8..91afa1bdf4 100644 --- a/metrics/prometheus/metric_set.go +++ b/metrics/prometheus/metric_set.go @@ -40,11 +40,15 @@ type metricSet struct { providerRequestsTotalCounterVec *prometheus.CounterVec // report the provider-side's processing request counter data providerRequestsProcessingGaugeVec *prometheus.GaugeVec + // The number of requests successfully received by the provider + providerRequestsSucceedTotalCounterVec *prometheus.CounterVec // report the consumer-side's request total counter data consumerRequestsTotalCounterVec *prometheus.CounterVec // report the consumer-side's processing request counter data consumerRequestsProcessingGaugeVec *prometheus.GaugeVec + // The number of successful requests sent by consumers + consumerRequestsSucceedTotalCounterVec *prometheus.CounterVec } var labelNames = []string{applicationNameKey, groupKey, hostnameKey, interfaceKey, ipKey, methodKey, versionKey} @@ -57,6 +61,8 @@ func (ms *metricSet) initAndRegister(reporterConfig *metrics.ReporterConfig) { ms.providerRequestsTotalCounterVec = newCounterVec(buildMetricsName(providerField, requestsField, totalField), reporterConfig.Namespace, labelNames) ms.consumerRequestsProcessingGaugeVec = newGaugeVec(buildMetricsName(consumerField, requestsField, processingField), reporterConfig.Namespace, labelNames) ms.providerRequestsProcessingGaugeVec = newGaugeVec(buildMetricsName(providerField, requestsField, processingField), reporterConfig.Namespace, labelNames) + ms.consumerRequestsSucceedTotalCounterVec = newCounterVec(buildMetricsName(consumerField, requestsField, succeedField, totalField), reporterConfig.Namespace, labelNames) + ms.providerRequestsSucceedTotalCounterVec = newCounterVec(buildMetricsName(providerField, requestsField, succeedField, totalField), reporterConfig.Namespace, labelNames) prometheus.DefaultRegisterer.MustRegister( ms.consumerRTSummaryVec, @@ -65,6 +71,8 @@ func (ms *metricSet) initAndRegister(reporterConfig *metrics.ReporterConfig) { ms.providerRequestsTotalCounterVec, ms.consumerRequestsProcessingGaugeVec, ms.providerRequestsProcessingGaugeVec, + ms.consumerRequestsSucceedTotalCounterVec, + ms.providerRequestsSucceedTotalCounterVec, ) } diff --git a/metrics/prometheus/reporter.go b/metrics/prometheus/reporter.go index 9fdab30860..73135272e0 100644 --- a/metrics/prometheus/reporter.go +++ b/metrics/prometheus/reporter.go @@ -35,9 +35,8 @@ import ( ) var ( - reporterInstance *PrometheusReporter - reporterInitOnce sync.Once - defaultHistogramBucket = []float64{10, 50, 100, 200, 500, 1000, 10000} + reporterInstance *PrometheusReporter + reporterInitOnce sync.Once ) // should initialize after loading configuration @@ -147,3 +146,12 @@ func (reporter *PrometheusReporter) decRequestsProcessingGaugeVec(role string, l reporter.consumerRequestsProcessingGaugeVec.With(*labels).Dec() } } + +func (reporter *PrometheusReporter) incRequestsSucceedTotalCounterVec(role string, labels *prometheus.Labels) { + switch role { + case providerField: + reporter.providerRequestsSucceedTotalCounterVec.With(*labels).Inc() + case consumerField: + reporter.consumerRequestsSucceedTotalCounterVec.With(*labels).Inc() + } +} diff --git a/metrics/prometheus/reporter_test.go b/metrics/prometheus/reporter_test.go index af3def4028..de4283ed08 100644 --- a/metrics/prometheus/reporter_test.go +++ b/metrics/prometheus/reporter_test.go @@ -50,6 +50,7 @@ func TestPrometheusReporter_Report(t *testing.T) { assert.False(t, isConsumer(url)) ctx := context.Background() + reporter.ReportBeforeInvocation(ctx, invoker, inv) reporter.ReportAfterInvocation(ctx, invoker, inv, 100*time.Millisecond, nil) // consumer side @@ -60,6 +61,7 @@ func TestPrometheusReporter_Report(t *testing.T) { "BDTService&organization=ikurento.com&owner=ZX®istry.role=0&retries=&" + "service.filter=echo%2Ctoken%2Caccesslog×tamp=1569153406&token=934804bf-b007-4174-94eb-96e3e1d60cc7&version=&warmup=100") invoker = protocol.NewBaseInvoker(url) + reporter.ReportBeforeInvocation(ctx, invoker, inv) reporter.ReportAfterInvocation(ctx, invoker, inv, 100*time.Millisecond, nil) // invalid role @@ -70,5 +72,6 @@ func TestPrometheusReporter_Report(t *testing.T) { "BDTService&organization=ikurento.com&owner=ZX®istry.role=9&retries=&" + "service.filter=echo%2Ctoken%2Caccesslog×tamp=1569153406&token=934804bf-b007-4174-94eb-96e3e1d60cc7&version=&warmup=100") invoker = protocol.NewBaseInvoker(url) + reporter.ReportBeforeInvocation(ctx, invoker, inv) reporter.ReportAfterInvocation(ctx, invoker, inv, 100*time.Millisecond, nil) }