* [ISSUE #10117]Add registration metrics recording for batch instance registration. * [ISSUE #10117]Add registration metrics recording for batch instance registration. * [ISSUE #10117]Adjustment Plan. * [ISSUE #10117]Remove code. * Fix checkstyle. * fix ci. * Optimize code. * Optimize code. * Fix unit test. * Fix unit test.
This commit is contained in:
parent
51b6a443d3
commit
719f8aed04
@ -38,4 +38,6 @@ public class RemoteConstants {
|
|||||||
public static final String LABEL_MODULE_CONFIG = "config";
|
public static final String LABEL_MODULE_CONFIG = "config";
|
||||||
|
|
||||||
public static final String LABEL_MODULE_NAMING = "naming";
|
public static final String LABEL_MODULE_NAMING = "naming";
|
||||||
|
|
||||||
|
public static final String MONITOR_LABEL_NONE = "none";
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.alibaba.nacos.client.monitor;
|
package com.alibaba.nacos.client.monitor;
|
||||||
|
|
||||||
|
import io.prometheus.client.Counter;
|
||||||
import io.prometheus.client.Gauge;
|
import io.prometheus.client.Gauge;
|
||||||
import io.prometheus.client.Histogram;
|
import io.prometheus.client.Histogram;
|
||||||
|
|
||||||
@ -33,6 +34,10 @@ public class MetricsMonitor {
|
|||||||
.labelNames("module", "method", "url", "code").name("nacos_client_request").help("nacos_client_request")
|
.labelNames("module", "method", "url", "code").name("nacos_client_request").help("nacos_client_request")
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
private static final Counter NACOS_CLIENT_NAMING_REQUEST_FAILED_TOTAL = Counter.build()
|
||||||
|
.name("nacos_client_naming_request_failed_total").help("nacos_client_naming_request_failed_total")
|
||||||
|
.labelNames("module", "req_class", "res_status", "res_code", "err_class").register();
|
||||||
|
|
||||||
public static Gauge.Child getServiceInfoMapSizeMonitor() {
|
public static Gauge.Child getServiceInfoMapSizeMonitor() {
|
||||||
return NACOS_MONITOR.labels("naming", "serviceInfoMapSize");
|
return NACOS_MONITOR.labels("naming", "serviceInfoMapSize");
|
||||||
}
|
}
|
||||||
@ -52,5 +57,10 @@ public class MetricsMonitor {
|
|||||||
public static Histogram.Child getNamingRequestMonitor(String method, String url, String code) {
|
public static Histogram.Child getNamingRequestMonitor(String method, String url, String code) {
|
||||||
return NACOS_CLIENT_REQUEST_HISTOGRAM.labels("naming", method, url, code);
|
return NACOS_CLIENT_REQUEST_HISTOGRAM.labels("naming", method, url, code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Counter.Child getNamingRequestFailedMonitor(String reqClass, String resStatus, String resCode,
|
||||||
|
String errClass) {
|
||||||
|
return NACOS_CLIENT_NAMING_REQUEST_FAILED_TOTAL.labels("naming", reqClass, resStatus, resCode, errClass);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ import com.alibaba.nacos.api.remote.response.ResponseCode;
|
|||||||
import com.alibaba.nacos.api.selector.AbstractSelector;
|
import com.alibaba.nacos.api.selector.AbstractSelector;
|
||||||
import com.alibaba.nacos.api.selector.SelectorType;
|
import com.alibaba.nacos.api.selector.SelectorType;
|
||||||
import com.alibaba.nacos.client.env.NacosClientProperties;
|
import com.alibaba.nacos.client.env.NacosClientProperties;
|
||||||
|
import com.alibaba.nacos.client.monitor.MetricsMonitor;
|
||||||
import com.alibaba.nacos.client.naming.cache.ServiceInfoHolder;
|
import com.alibaba.nacos.client.naming.cache.ServiceInfoHolder;
|
||||||
import com.alibaba.nacos.client.naming.event.ServerListChangedEvent;
|
import com.alibaba.nacos.client.naming.event.ServerListChangedEvent;
|
||||||
import com.alibaba.nacos.client.naming.remote.AbstractNamingClientProxy;
|
import com.alibaba.nacos.client.naming.remote.AbstractNamingClientProxy;
|
||||||
@ -63,10 +64,12 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static com.alibaba.nacos.api.remote.RemoteConstants.MONITOR_LABEL_NONE;
|
||||||
import static com.alibaba.nacos.client.utils.LogUtils.NAMING_LOGGER;
|
import static com.alibaba.nacos.client.utils.LogUtils.NAMING_LOGGER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -365,11 +368,11 @@ public class NamingGrpcClientProxy extends AbstractNamingClientProxy {
|
|||||||
|
|
||||||
private <T extends Response> T requestToServer(AbstractNamingRequest request, Class<T> responseClass)
|
private <T extends Response> T requestToServer(AbstractNamingRequest request, Class<T> responseClass)
|
||||||
throws NacosException {
|
throws NacosException {
|
||||||
|
Response response = null;
|
||||||
try {
|
try {
|
||||||
request.putAllHeader(
|
request.putAllHeader(
|
||||||
getSecurityHeaders(request.getNamespace(), request.getGroupName(), request.getServiceName()));
|
getSecurityHeaders(request.getNamespace(), request.getGroupName(), request.getServiceName()));
|
||||||
Response response =
|
response = requestTimeout < 0 ? rpcClient.request(request) : rpcClient.request(request, requestTimeout);
|
||||||
requestTimeout < 0 ? rpcClient.request(request) : rpcClient.request(request, requestTimeout);
|
|
||||||
if (ResponseCode.SUCCESS.getCode() != response.getResultCode()) {
|
if (ResponseCode.SUCCESS.getCode() != response.getResultCode()) {
|
||||||
throw new NacosException(response.getErrorCode(), response.getMessage());
|
throw new NacosException(response.getErrorCode(), response.getMessage());
|
||||||
}
|
}
|
||||||
@ -378,12 +381,33 @@ public class NamingGrpcClientProxy extends AbstractNamingClientProxy {
|
|||||||
}
|
}
|
||||||
NAMING_LOGGER.error("Server return unexpected response '{}', expected response should be '{}'",
|
NAMING_LOGGER.error("Server return unexpected response '{}', expected response should be '{}'",
|
||||||
response.getClass().getName(), responseClass.getName());
|
response.getClass().getName(), responseClass.getName());
|
||||||
|
throw new NacosException(NacosException.SERVER_ERROR, "Server return invalid response");
|
||||||
} catch (NacosException e) {
|
} catch (NacosException e) {
|
||||||
|
recordRequestFailedMetrics(request, e, response);
|
||||||
throw e;
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
recordRequestFailedMetrics(request, e, response);
|
||||||
throw new NacosException(NacosException.SERVER_ERROR, "Request nacos server failed: ", e);
|
throw new NacosException(NacosException.SERVER_ERROR, "Request nacos server failed: ", e);
|
||||||
}
|
}
|
||||||
throw new NacosException(NacosException.SERVER_ERROR, "Server return invalid response");
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Records registration metrics for a service instance.
|
||||||
|
*
|
||||||
|
* @param request The registration request object.
|
||||||
|
* @param exception The Exception encountered during the registration process, or null if registration was
|
||||||
|
* successful.
|
||||||
|
* @param response The response object containing registration result information, or null if registration failed.
|
||||||
|
*/
|
||||||
|
private void recordRequestFailedMetrics(AbstractNamingRequest request, Exception exception, Response response) {
|
||||||
|
if (Objects.isNull(response)) {
|
||||||
|
MetricsMonitor.getNamingRequestFailedMonitor(request.getClass().getSimpleName(), MONITOR_LABEL_NONE,
|
||||||
|
MONITOR_LABEL_NONE, exception.getClass().getSimpleName()).inc();
|
||||||
|
} else {
|
||||||
|
MetricsMonitor.getNamingRequestFailedMonitor(request.getClass().getSimpleName(),
|
||||||
|
String.valueOf(response.getResultCode()), String.valueOf(response.getErrorCode()),
|
||||||
|
MONITOR_LABEL_NONE).inc();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -144,7 +144,7 @@ public class NamingGrpcClientProxyTest {
|
|||||||
uuidField.setAccessible(true);
|
uuidField.setAccessible(true);
|
||||||
uuid = (String) uuidField.get(client);
|
uuid = (String) uuidField.get(client);
|
||||||
|
|
||||||
Assert.assertTrue(RpcClientFactory.getClient(uuid) != null);
|
Assert.assertNotNull(RpcClientFactory.getClient(uuid));
|
||||||
Field rpcClientField = NamingGrpcClientProxy.class.getDeclaredField("rpcClient");
|
Field rpcClientField = NamingGrpcClientProxy.class.getDeclaredField("rpcClient");
|
||||||
rpcClientField.setAccessible(true);
|
rpcClientField.setAccessible(true);
|
||||||
((RpcClient) rpcClientField.get(client)).shutdown();
|
((RpcClient) rpcClientField.get(client)).shutdown();
|
||||||
@ -187,7 +187,7 @@ public class NamingGrpcClientProxyTest {
|
|||||||
try {
|
try {
|
||||||
client.registerService(SERVICE_NAME, GROUP_NAME, instance);
|
client.registerService(SERVICE_NAME, GROUP_NAME, instance);
|
||||||
} catch (NacosException ex) {
|
} catch (NacosException ex) {
|
||||||
Assert.assertEquals(null, ex.getCause());
|
Assert.assertNull(ex.getCause());
|
||||||
|
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
@ -435,7 +435,7 @@ public class NamingGrpcClientProxyTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testShutdown() throws Exception {
|
public void testShutdown() throws Exception {
|
||||||
client.shutdown();
|
client.shutdown();
|
||||||
Assert.assertTrue(RpcClientFactory.getClient(uuid) == null);
|
Assert.assertNull(RpcClientFactory.getClient(uuid));
|
||||||
//verify(this.rpcClient, times(1)).shutdown();
|
//verify(this.rpcClient, times(1)).shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user