diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/controller/K8sDashboardController.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/controller/K8sDashboardController.java index ac26738a0..575a66698 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/controller/K8sDashboardController.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/controller/K8sDashboardController.java @@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.HashMap; + @RestController @RequestMapping("dashboard") @Api(tags = "微服务大屏") diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sClusterStatus.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sClusterStatus.java index 0594dbf41..e3b599af9 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sClusterStatus.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sClusterStatus.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.HashMap; import java.util.List; @@ -43,6 +44,9 @@ public class K8sClusterStatus { @ApiModelProperty(value = "今日微服务重启次数") private Integer microserviceRestartCountToday; + @ApiModelProperty(value = "微服务Pod运行状态(Key代表状态,Value代表数量)") + private HashMap podStatus; + public void setNodeCount(PrometheusResVo prometheusResVo) { this.nodeCount = Integer.parseInt(getPromStringValue(prometheusResVo)); } @@ -83,6 +87,30 @@ public class K8sClusterStatus { this.microserviceRestartCountToday = Integer.parseInt(getPromStringValue(prometheusResVo)); } + public void setPodStatus(PrometheusResVo prometheusResVo) { + HashMap podStatus = new HashMap<>(); + if (prometheusResVo != null && "success".equals(prometheusResVo.getStatus())) { + List resultList = prometheusResVo.getData().getResult(); + for (PrometheusResultVo result : resultList) { + Integer value=Integer.parseInt(result.getValue()[1]); + switch (result.getMetric().getString("phase")){ + case "Running": + podStatus.put("运行中", value); + break; + case "Pending": + podStatus.put("等待中", value); + break; + case "Succeeded": + podStatus.put("运行已完成", value); + break; + case "Failed": + podStatus.put("运行失败", value); + } + } + } + this.podStatus = podStatus; + } + private String getPromStringValue(PrometheusResVo prometheusResVo) { String value = ""; if (prometheusResVo != null && "success".equals(prometheusResVo.getStatus())) { diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IK8sDashboardService.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IK8sDashboardService.java index 4265678e3..b2856703d 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IK8sDashboardService.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/IK8sDashboardService.java @@ -4,6 +4,7 @@ import com.microservices.mon.k8s.domain.K8sClusterStatus; import com.microservices.mon.k8s.domain.K8sClusterNode; import com.microservices.mon.k8s.domain.K8sNamespace; +import java.util.HashMap; import java.util.List; public interface IK8sDashboardService { diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/K8SDashboardServiceImpl.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/K8SDashboardServiceImpl.java index e3fd27005..dfc99d04b 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/K8SDashboardServiceImpl.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/K8SDashboardServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MonCommonAsyncServiceImpl.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MonCommonAsyncServiceImpl.java index 6e344e215..a8e6dafdb 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MonCommonAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/service/impl/MonCommonAsyncServiceImpl.java @@ -103,8 +103,11 @@ public class MonCommonAsyncServiceImpl extends CommonService implements IMonComm List k8sNamespaceList = k8sDashboardService.getNamespaceDetailList(); k8sClusterStatus.setMicroserviceApplicationCount(k8sNamespaceList); List namespaceNameList = k8sNamespaceList.stream().map(K8sNamespace::getName).collect(Collectors.toList()); - JSONObject microserviceRestartCountTodayJson = remoteGatewayService.getPrometheusQueryRes(PromQLConstant.MICROSERVICE_RESTART_COUNT_TODAY(namespaceNameList), SecurityContextHolder.getUserKey()); + JSONObject microserviceRestartCountTodayJson = remoteGatewayService.getPrometheusQueryRes(PromQLConstant.MICROSERVICE_RESTART_COUNT_TODAY(cluster_id,namespaceNameList), SecurityContextHolder.getUserKey()); k8sClusterStatus.setMicroserviceRestartCountToday(microserviceRestartCountTodayJson.toJavaObject(PrometheusResVo.class)); + + JSONObject podStatusJson = remoteGatewayService.getPrometheusQueryRes(PromQLConstant.POD_STATUS(cluster_id,namespaceNameList), SecurityContextHolder.getUserKey()); + k8sClusterStatus.setPodStatus(podStatusJson.toJavaObject(PrometheusResVo.class)); } finally { countDownLatch.countDown(); } diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/utils/PromQLConstant.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/utils/PromQLConstant.java index 9e357a0eb..7bf3c039d 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/utils/PromQLConstant.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/utils/PromQLConstant.java @@ -30,7 +30,10 @@ public class PromQLConstant { public static final String AVERAGE_REQUEST_PROCESSING_TIME_TODAY = "sum(rate(nginx_http_response_time_seconds_sum[1d]))*1000"; public static final String REQUEST_SUCCESS_RATE_TODAY = "(sum(nginx_http_response_count_total{status=~\"2.*|3.*\"})/sum(nginx_http_response_count_total))*100"; - public static String MICROSERVICE_RESTART_COUNT_TODAY(List namespaceNameList) { - return String.format("sum(changes(kube_pod_container_status_restarts_total{namespace=~\"%s\"}[1d]))", String.join("|", namespaceNameList)); + public static String MICROSERVICE_RESTART_COUNT_TODAY(String clusterId,List namespaceNameList) { + return String.format("sum(changes(kube_pod_container_status_restarts_total{cluster=~\"%s\",namespace=~\"%s\"}[1d]))",clusterId, String.join("|", namespaceNameList)); + } + public static String POD_STATUS(String clusterId,List namespaceNameList) { + return String.format("sum(kube_pod_status_phase{cluster=~\"%s\",namespace=~\"%s\", phase!=\"Unknown\"}) by (phase)",clusterId, String.join("|", namespaceNameList)); } }