diff --git a/src/main/java/com/tongran/agentserver/server/collect/docker/impl/DockerServiceImpl.java b/src/main/java/com/tongran/agentserver/server/collect/docker/impl/DockerServiceImpl.java index 56e2d91..26e4c32 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/docker/impl/DockerServiceImpl.java +++ b/src/main/java/com/tongran/agentserver/server/collect/docker/impl/DockerServiceImpl.java @@ -81,7 +81,8 @@ public class DockerServiceImpl implements DockerService { try { // 执行 docker stats 命令(--no-stream 表示只输出一次) Process process = new ProcessBuilder( - "docker", "stats", "--no-stream", dockerVO.getId() + "docker", "stats", "--no-stream", dockerVO.getId(), + "--format", "'table {{.ID}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.NetIO}}'" ).start(); // 读取命令输出 @@ -95,12 +96,24 @@ public class DockerServiceImpl implements DockerService { // "your_container_id 0.00% 0.000 CPU % 0 B / 0 B 0 packets / 0 packets" // 实际输出可能因 Docker 版本不同而变化,需根据实际情况调整正则表达式 if (line.contains(dockerVO.getId())) { +// AssertLog.info("docker:{}",line); String[] parts = line.trim().split("\\s+"); - String cpuUtil = parts[2]; // cpu使用率 - String memUtil = parts[6]; // 内存使用率 + String cpuUtil = parts[3]; // cpu使用率 + String memUtil = parts[4]; // 内存使用率 + // 网络流量通常在第 4 列(接收)和第 5 列(发送),格式为 "B/s" 或 "B" + dockerVO.setCpuUtil(cpuUtil); + String rxRate = "0B";// 接收速率(如 "1.23kB/s") + String txRate = "0B";// 发送速率(如 "4.56kB/s") + //数据间有空格 + if(parts.length > 9){ + rxRate = parts[5]+parts[6]; + txRate = parts[8]+parts[9]; + }else{ + rxRate = parts[5]; + txRate = parts[7]; + + } // 网络流量通常在第 4 列(接收)和第 5 列(发送),格式为 "B/s" 或 "B" - String rxRate = parts[7]; // 接收速率(如 "1.23kB/s") - String txRate = parts[9]; // 发送速率(如 "4.56kB/s") dockerVO.setCpuUtil(cpuUtil); dockerVO.setMemUtil(memUtil); dockerVO.setNetInSpeed(rxRate);