prometheus 整合dubbo
dubbo 自身的監控使用了dubbo 的攔截器,這裡我們也使用dubbo 的攔截器來新增prometheus 監控
首先需要dubbo 專案提供http的介面,為dubbo 專案新增 web依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
加入 micrometer prometheus
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
實現dubbo 的filter 介面,新增 @Activate(group = Constants.PROVIDER)註解,宣告攔截所有服務提供者
@Activate(group = Constants.PROVIDER) public class PrometheusFilter implements Filter { private Logger logger = LoggerFactory.getLogger(PrometheusFilter.class); @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { logger.info("----------------prometheus filter---------------"); RequestTimeCollector requestTimeCollector = (RequestTimeCollector) ServiceBean.getSpringContext(). getBean("dubboRequestTimeCollector"); RpcContext context = RpcContext.getContext(); boolean isProvider = context.isProviderSide(); String serviceName = invoker.getInterface().getName(); String methodName = RpcUtils.getMethodName(invocation); long start = System.currentTimeMillis(); try { // proceed invocation chain Result result = invoker.invoke(invocation); long duration = System.currentTimeMillis() - start; String status = "success"; if(result.getException()!=null){ status = result.getException().getClass().getSimpleName(); } requestTimeCollector.setValue(duration,serviceName,methodName,status); return result; } catch (RpcException e) { long duration = System.currentTimeMillis() - start; String result = "error"; if (e.isTimeout()) { result = "timeoutError"; } if (e.isBiz()) { result = "bisError"; } if (e.isNetwork()) { result = "networkError"; } if (e.isSerialization()) { result = "serializationError"; } requestTimeCollector.setValue(duration,serviceName,methodName,result); throw e; } } }
配置攔截器擴充套件
在 resourceMETA-INFdubbo 資料夾下建立
com.alibaba.dubbo.rpc.Filter 文字檔案
新增 prometheus=com.rcplatform.livechat.dubbo.filter.PrometheusFilter文字
啟動專案
訪問/actuator/prometheus,即可看到監控項