docker 采集数据索引适配

This commit is contained in:
qiminbao
2025-09-03 16:36:20 +08:00
parent 8b5fb8c401
commit 0e2c239fea
@@ -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);