forked from Gitlink/microservices
feat(运维监控模块): 新增获取Node状态接口
1. 创建 [K8sNodeStatus] 实例并设置节点IP。 2. 构造PromQL查询语句,调用 Prometheus 接口获取节点CPU使用率: - 使用 [PromQLConstant.NODE_CPU_USAGE(nodeIp)] 生成查询语句。 - 调用 `remoteGatewayService.getPrometheusQueryRes(...)` 发送请求。 - 解析响应结果,若成功则提取CPU使用率数值并设置到对象中。 3. 同理,查询节点内存使用率并设置到对象中。 4. 返回封装好的 [K8sNodeStatus]对象。
This commit is contained in:
parent
274af358dd
commit
213aee5587
|
|
@ -66,4 +66,10 @@ public class K8sDashboardController extends BaseController {
|
|||
public GenericsAjaxResult<K8sPodContainerStatus> podContainerStatus(@PathVariable("containerID") String containerID) {
|
||||
return GenericsAjaxResult.success(k8sNamespaceService.getPodContainerStatus(containerID));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "获取服务器节点状态")
|
||||
@GetMapping("/cluster/nodeStatus/{nodeIp}")
|
||||
public GenericsAjaxResult<K8sNodeStatus> nodeStatus(@PathVariable("nodeIp") String nodeIp) {
|
||||
return GenericsAjaxResult.success(k8sNamespaceService.getNodeStatus(nodeIp));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -16,6 +16,6 @@ public class K8sPodContainerStatus {
|
|||
@ApiModelProperty(value = "CPU使用率")
|
||||
private Float cpuUsage;
|
||||
|
||||
@ApiModelProperty(value = "内存使用率")
|
||||
@ApiModelProperty(value = "内存使用情况")
|
||||
private String memoryUsage;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,4 +19,6 @@ public interface IK8sDashboardService {
|
|||
List<ApplicationRequestCountData> getApplicationRequestCount();
|
||||
|
||||
K8sPodContainerStatus getPodContainerStatus(String containerID);
|
||||
|
||||
K8sNodeStatus getNodeStatus(String nodeIp);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<K8sNamespace> getK8sNamespaceList() {
|
||||
List<K8sNamespace> k8sNamespaceList = new ArrayList<>();
|
||||
List<RancherNamespaceVo> rancherNamespaceVoList;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue