From 213aee55877dc31d9ffce721c0fde0fea398d946 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@example.com> Date: Thu, 22 May 2025 15:40:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=BF=90=E7=BB=B4=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E6=A8=A1=E5=9D=97):=20=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96Node?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 创建 [K8sNodeStatus] 实例并设置节点IP。 2. 构造PromQL查询语句,调用 Prometheus 接口获取节点CPU使用率: - 使用 [PromQLConstant.NODE_CPU_USAGE(nodeIp)] 生成查询语句。 - 调用 `remoteGatewayService.getPrometheusQueryRes(...)` 发送请求。 - 解析响应结果,若成功则提取CPU使用率数值并设置到对象中。 3. 同理,查询节点内存使用率并设置到对象中。 4. 返回封装好的 [K8sNodeStatus]对象。 --- .../controller/K8sDashboardController.java | 6 ++++++ .../mon/k8s/domain/K8sNodeStatus.java | 19 +++++++++++++++++++ .../mon/k8s/domain/K8sPodContainerStatus.java | 2 +- .../mon/k8s/service/IK8sDashboardService.java | 2 ++ .../service/impl/K8SDashboardServiceImpl.java | 19 +++++++++++++++++++ .../mon/k8s/utils/PromQLConstant.java | 6 ++++++ 6 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sNodeStatus.java 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 4d9a3210b..74d84b08b 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 @@ -66,4 +66,10 @@ public class K8sDashboardController extends BaseController { public GenericsAjaxResult podContainerStatus(@PathVariable("containerID") String containerID) { return GenericsAjaxResult.success(k8sNamespaceService.getPodContainerStatus(containerID)); } + + @ApiOperation(value = "获取服务器节点状态") + @GetMapping("/cluster/nodeStatus/{nodeIp}") + public GenericsAjaxResult nodeStatus(@PathVariable("nodeIp") String nodeIp) { + return GenericsAjaxResult.success(k8sNamespaceService.getNodeStatus(nodeIp)); + } } diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sNodeStatus.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sNodeStatus.java new file mode 100644 index 000000000..a17481b9d --- /dev/null +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sNodeStatus.java @@ -0,0 +1,19 @@ +package com.microservices.mon.k8s.domain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +@ApiModel("K8S Node状态") +public class K8sNodeStatus { + @ApiModelProperty(value = "节点IP") + private String nodeIp; + + @ApiModelProperty(value = "CPU使用率") + private Float cpuUsage; + + @ApiModelProperty(value = "内存使用率") + private Float memoryUsage; +} diff --git a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sPodContainerStatus.java b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sPodContainerStatus.java index 4ec806232..d317fe926 100644 --- a/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sPodContainerStatus.java +++ b/microservices-modules/microservices-modules-mon/src/main/java/com/microservices/mon/k8s/domain/K8sPodContainerStatus.java @@ -16,6 +16,6 @@ public class K8sPodContainerStatus { @ApiModelProperty(value = "CPU使用率") private Float cpuUsage; - @ApiModelProperty(value = "内存使用率") + @ApiModelProperty(value = "内存使用情况") private String memoryUsage; } 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 6ca80ae43..a30fdc61e 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 @@ -19,4 +19,6 @@ public interface IK8sDashboardService { List getApplicationRequestCount(); K8sPodContainerStatus getPodContainerStatus(String containerID); + + K8sNodeStatus getNodeStatus(String nodeIp); } 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 d08cb2492..8ebf95982 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 @@ -218,6 +218,25 @@ public class K8SDashboardServiceImpl extends CommonService implements IK8sDashbo return k8sPodContainerStatus; } + @Override + public K8sNodeStatus getNodeStatus(String nodeIp) { + K8sNodeStatus k8sNodeStatus = new K8sNodeStatus(); + k8sNodeStatus.setNodeIp(nodeIp); + JSONObject cpuUsageJson = remoteGatewayService.getPrometheusQueryRes(PromQLConstant.NODE_CPU_USAGE(nodeIp), SecurityContextHolder.getUserKey()); + PrometheusResVo cpuPrometheusResVo = cpuUsageJson.toJavaObject(PrometheusResVo.class); + if (cpuPrometheusResVo != null && cpuPrometheusResVo.isSuccess()) { + PrometheusResultVo result = cpuPrometheusResVo.getData().getResult().get(0); + k8sNodeStatus.setCpuUsage(result.getValue().getFloatValue(1)); + } + JSONObject memoryUsageJson = remoteGatewayService.getPrometheusQueryRes(PromQLConstant.NODE_MEMORY_USAGE(nodeIp), SecurityContextHolder.getUserKey()); + PrometheusResVo memoryPrometheusResVo = memoryUsageJson.toJavaObject(PrometheusResVo.class); + if (memoryPrometheusResVo != null && memoryPrometheusResVo.isSuccess()) { + PrometheusResultVo result = memoryPrometheusResVo.getData().getResult().get(0); + k8sNodeStatus.setMemoryUsage(result.getValue().getFloatValue(1)); + } + return k8sNodeStatus; + } + private List getK8sNamespaceList() { List k8sNamespaceList = new ArrayList<>(); List rancherNamespaceVoList; 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 5a850ae17..5a12174ab 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 @@ -47,4 +47,10 @@ public class PromQLConstant { public static String POD_MEMORY_USAGE(String containerId) { return String.format("sum without (dc,from,id) (container_memory_usage_bytes{container_label_io_kubernetes_sandbox_id=\"%s\"} - container_memory_cache{container_label_io_kubernetes_sandbox_id=\"%s\"})", containerId, containerId); } + public static String NODE_CPU_USAGE(String nodeIp) { + return String.format("(sum by(instance) (irate(node_cpu_seconds_total{ip=\"%s\",mode!=\"idle\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{ip=\"%s\"}[1m])))) * 100", nodeIp, nodeIp); + } + public static String NODE_MEMORY_USAGE(String nodeIp) { + return String.format("100 - ((node_memory_MemAvailable_bytes{ip=\"%s\"} * 100) / node_memory_MemTotal_bytes{ip=\"%s\"})", nodeIp, nodeIp); + } }