This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new 664593c9dc Added metrics for failed request total (#11315)
664593c9dc is described below
commit 664593c9dcf3c6c0ed813dc4b8c49d539388db49
Author: jojocodeX <[email protected]>
AuthorDate: Tue Jan 17 12:46:02 2023 +0800
Added metrics for failed request total (#11315)
---
.../common/metrics/collector/DefaultMetricsCollector.java | 10 ++++++++++
.../common/metrics/collector/stat/MetricsStatComposite.java | 7 +++++++
.../org/apache/dubbo/common/metrics/event/RequestEvent.java | 3 ++-
.../java/org/apache/dubbo/common/metrics/model/MetricsKey.java | 2 +-
.../dubbo/metrics/collector/AggregateMetricsCollector.java | 7 +++++++
.../apache/dubbo/metrics/filter/MetricsCollectExecutor.java | 3 +++
.../org/apache/dubbo/metrics/filter/MetricsFilterTest.java | 9 ++++++---
7 files changed, 36 insertions(+), 5 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
index 3aeb48509b..bc034ccff5 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/DefaultMetricsCollector.java
@@ -119,6 +119,12 @@ public class DefaultMetricsCollector implements
MetricsCollector {
});
}
+ public void totalFailedRequests(String interfaceName, String methodName,
String group, String version) {
+ doExecute(RequestEvent.Type.TOTAL_FAILED,statHandler-> {
+ statHandler.increase(interfaceName, methodName, group, version);
+ });
+ }
+
public void addRT(String interfaceName, String methodName, String group,
String version, Long responseTime) {
stats.addRT(interfaceName, methodName, group, version, responseTime);
}
@@ -153,6 +159,10 @@ public class DefaultMetricsCollector implements
MetricsCollector {
doExecute(RequestEvent.Type.REQUEST_LIMIT,
MetricsStatHandler::get).filter(e->!e.isEmpty())
.ifPresent(map-> map.forEach((k, v) -> list.add(new
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_LIMIT_AGG, k.getTags(),
REQUESTS, v::get))));
+
+ doExecute(RequestEvent.Type.TOTAL_FAILED,
MetricsStatHandler::get).filter(e->!e.isEmpty())
+ .ifPresent(map-> map.forEach((k, v) -> list.add(new
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG,
k.getTags(), REQUESTS, v::get))));
+
}
private void collectRT(List<MetricSample> list) {
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
index f3ba97f0c5..baed0ad4cc 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/collector/stat/MetricsStatComposite.java
@@ -142,6 +142,13 @@ public class MetricsStatComposite{
publishEvent(new RequestEvent(metric,
RequestEvent.Type.REQUEST_TIMEOUT));
}
});
+
+ stats.put(RequestEvent.Type.TOTAL_FAILED, new
DefaultMetricsStatHandler(applicationName) {
+ @Override
+ public void doNotify(MethodMetric metric) {
+ publishEvent(new RequestEvent(metric,
RequestEvent.Type.TOTAL_FAILED));
+ }
+ });
}
private void publishEvent(MetricsEvent event) {
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
index 5501905331..955c67b57d 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/event/RequestEvent.java
@@ -43,6 +43,7 @@ public class RequestEvent extends MetricsEvent {
BUSINESS_FAILED,
REQUEST_TIMEOUT,
REQUEST_LIMIT,
- PROCESSING
+ PROCESSING,
+ TOTAL_FAILED
}
}
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
index b352a187fc..28f19c7c48 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/metrics/model/MetricsKey.java
@@ -32,7 +32,7 @@ public enum MetricsKey {
PROVIDER_METRIC_REQUESTS_BUSINESS_FAILED_AGG("dubbo.provider.requests.business.failed.aggregate",
"Aggregated Business Failed Requests"),
PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG("dubbo.provider.requests.timeout.failed.aggregate",
"Aggregated timeout Failed Requests"),
PROVIDER_METRIC_REQUESTS_LIMIT_AGG("dubbo.provider.requests.limit.aggregate",
"Aggregated limit Requests"),
-
+
PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG("dubbo.provider.requests.failed.total.aggregate",
"Aggregated failed total Requests"),
PROVIDER_METRIC_QPS("dubbo.provider.qps", "Query Per Seconds"),
PROVIDER_METRIC_RT_LAST("dubbo.provider.rt.last", "Last Response Time"),
PROVIDER_METRIC_RT_MIN("dubbo.provider.rt.min", "Min Response Time"),
diff --git
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
index 0f80c89658..1dfaab9ecd 100644
---
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
+++
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/collector/AggregateMetricsCollector.java
@@ -57,6 +57,7 @@ public class AggregateMetricsCollector implements
MetricsCollector, MetricsListe
private final Map<MethodMetric, TimeWindowCounter> businessFailedRequests
= new ConcurrentHashMap<>();
private final Map<MethodMetric, TimeWindowCounter> timeoutRequests = new
ConcurrentHashMap<>();
private final Map<MethodMetric, TimeWindowCounter> limitRequests = new
ConcurrentHashMap<>();
+ private final Map<MethodMetric, TimeWindowCounter> totalFailedRequests =
new ConcurrentHashMap<>();
private final Map<MethodMetric, TimeWindowCounter> qps = new
ConcurrentHashMap<>();
private final Map<MethodMetric, TimeWindowQuantile> rt = new
ConcurrentHashMap<>();
@@ -128,6 +129,10 @@ public class AggregateMetricsCollector implements
MetricsCollector, MetricsListe
counter = limitRequests.computeIfAbsent(metric, k -> new
TimeWindowCounter(bucketNum, timeWindowSeconds));
break;
+ case TOTAL_FAILED:
+ counter = totalFailedRequests.computeIfAbsent(metric, k -> new
TimeWindowCounter(bucketNum, timeWindowSeconds));
+ break;
+
default:
break;
}
@@ -154,6 +159,8 @@ public class AggregateMetricsCollector implements
MetricsCollector, MetricsListe
businessFailedRequests.forEach((k, v) -> list.add(new
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_BUSINESS_FAILED_AGG,
k.getTags(), REQUESTS, v::get)));
timeoutRequests.forEach((k, v) -> list.add(new
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG, k.getTags(),
REQUESTS, v::get)));
limitRequests.forEach((k, v) -> list.add(new
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_LIMIT_AGG, k.getTags(),
REQUESTS, v::get)));
+ totalFailedRequests.forEach((k, v) -> list.add(new
GaugeMetricSample(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG,
k.getTags(), REQUESTS, v::get)));
+
}
private void collectQPS(List<MetricSample> list) {
diff --git
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
index e321b00818..cd56b387c2 100644
---
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
+++
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/filter/MetricsCollectExecutor.java
@@ -82,6 +82,9 @@ public class MetricsCollectExecutor {
collector.increaseFailedRequests(interfaceName,
methodName, group, version);
}
}
+
+ collector.totalFailedRequests(interfaceName, methodName, group,
version);
+
endExecute(()-> throwable instanceof RpcException && ((RpcException)
throwable).isBiz());
}
diff --git
a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
index 4f59ab4873..df12399b36 100644
---
a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
+++
b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
@@ -146,7 +146,7 @@ class MetricsFilterTest {
@Test
- void testTimeoutRequests() {
+ void testTimeoutAndFailedRequests() {
collector.setCollectEnabled(true);
given(invoker.invoke(invocation)).willThrow(new
RpcException(RpcException.TIMEOUT_EXCEPTION));
@@ -164,10 +164,13 @@ class MetricsFilterTest {
}
Map<String, MetricSample> metricsMap = getMetricsMap();
Assertions.assertTrue(metricsMap.containsKey(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG.getName()));
+
Assertions.assertTrue(metricsMap.containsKey(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG.getName()));
- MetricSample sample =
metricsMap.get(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG.getName());
+ MetricSample timeoutSample =
metricsMap.get(MetricsKey.PROVIDER_METRIC_REQUESTS_TIMEOUT_AGG.getName());
+ Assertions.assertSame(((GaugeMetricSample)
timeoutSample).getSupplier().get().longValue(), count);
- Assertions.assertSame(((GaugeMetricSample)
sample).getSupplier().get().longValue(), count);
+ GaugeMetricSample failedSample =
(GaugeMetricSample)metricsMap.get(MetricsKey.PROVIDER_METRIC_REQUESTS_TOTAL_FAILED_AGG.getName());
+ Assertions.assertSame(failedSample.getSupplier().get().longValue(),
count);
}
@Test