作者 钟来

服务器运维系统监控修改

@@ -2,9 +2,12 @@ package com.zhonglai.luhui.admin.controller.monitor; @@ -2,9 +2,12 @@ package com.zhonglai.luhui.admin.controller.monitor;
2 2
3 import cn.hutool.core.bean.BeanUtil; 3 import cn.hutool.core.bean.BeanUtil;
4 import com.alibaba.fastjson.JSONObject; 4 import com.alibaba.fastjson.JSONObject;
  5 +import com.google.gson.JsonArray;
  6 +import com.google.gson.JsonObject;
5 import com.ruoyi.common.core.domain.AjaxResult; 7 import com.ruoyi.common.core.domain.AjaxResult;
6 import com.ruoyi.common.core.page.TableDataInfo; 8 import com.ruoyi.common.core.page.TableDataInfo;
7 import com.ruoyi.common.utils.DateUtils; 9 import com.ruoyi.common.utils.DateUtils;
  10 +import com.ruoyi.common.utils.GsonConstructor;
8 import com.ruoyi.common.utils.ServletUtils; 11 import com.ruoyi.common.utils.ServletUtils;
9 import com.ruoyi.common.utils.ip.IpUtils; 12 import com.ruoyi.common.utils.ip.IpUtils;
10 import com.ruoyi.framework.web.domain.Server; 13 import com.ruoyi.framework.web.domain.Server;
@@ -37,10 +40,7 @@ import javax.xml.parsers.DocumentBuilderFactory; @@ -37,10 +40,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
37 import javax.xml.parsers.ParserConfigurationException; 40 import javax.xml.parsers.ParserConfigurationException;
38 import java.io.IOException; 41 import java.io.IOException;
39 import java.io.StringReader; 42 import java.io.StringReader;
40 -import java.util.Date;  
41 -import java.util.HashMap;  
42 -import java.util.List;  
43 -import java.util.Map; 43 +import java.util.*;
44 import java.util.concurrent.ScheduledExecutorService; 44 import java.util.concurrent.ScheduledExecutorService;
45 import java.util.concurrent.TimeUnit; 45 import java.util.concurrent.TimeUnit;
46 46
@@ -83,6 +83,8 @@ public class ServerController extends BaseController @@ -83,6 +83,8 @@ public class ServerController extends BaseController
83 sysMonitorServer.setConnection_count(monitorServerUploadDto.getConnection_count()); 83 sysMonitorServer.setConnection_count(monitorServerUploadDto.getConnection_count());
84 sysMonitorServer.setMemory_usage(new Double(monitorServerUploadDto.getMemory_usage()*100).intValue()); 84 sysMonitorServer.setMemory_usage(new Double(monitorServerUploadDto.getMemory_usage()*100).intValue());
85 sysMonitorServer.setDisk_usage(new Double(monitorServerUploadDto.getDisk_usage()*100).intValue()); 85 sysMonitorServer.setDisk_usage(new Double(monitorServerUploadDto.getDisk_usage()*100).intValue());
  86 + sysMonitorServer.setCpu_info(tranPsAux(monitorServerUploadDto.getCpu_info()));
  87 + sysMonitorServer.setMemory_info(tranPsAux(monitorServerUploadDto.getMemory_info()));
86 if(st==0) 88 if(st==0)
87 { 89 {
88 sysMonitorServer.setCreate_time(System.currentTimeMillis()); 90 sysMonitorServer.setCreate_time(System.currentTimeMillis());
@@ -98,9 +100,28 @@ public class ServerController extends BaseController @@ -98,9 +100,28 @@ public class ServerController extends BaseController
98 sysMonitorServerLog.setMemory_usage(sysMonitorServer.getMemory_usage()); 100 sysMonitorServerLog.setMemory_usage(sysMonitorServer.getMemory_usage());
99 sysMonitorServerLog.setDisk_usage(sysMonitorServer.getDisk_usage()); 101 sysMonitorServerLog.setDisk_usage(sysMonitorServer.getDisk_usage());
100 sysMonitorServerLog.setCreate_time(System.currentTimeMillis()); 102 sysMonitorServerLog.setCreate_time(System.currentTimeMillis());
  103 + sysMonitorServerLog.setCpu_info(sysMonitorServer.getCpu_info());
  104 + sysMonitorServerLog.setMemory_info(sysMonitorServer.getMemory_info());
101 publicService.insert(sysMonitorServerLog); 105 publicService.insert(sysMonitorServerLog);
102 return AjaxResult.success(); 106 return AjaxResult.success();
103 } 107 }
  108 +
  109 + private String tranPsAux(String princmd)
  110 + {
  111 + String[] auxs = princmd.split(";");
  112 + String[] auxHead = auxs[0].split("fg9527");
  113 +
  114 + List<String[]> data = new ArrayList<>();
  115 + for (int i=1;i<auxs.length;i++)
  116 + {
  117 + String[] aux = auxs[i].split("fg9527");
  118 + data.add(aux);
  119 + }
  120 + JsonObject jsonObject = new JsonObject();
  121 + jsonObject.add("header", GsonConstructor.get().toJsonTree(auxHead));
  122 + jsonObject.add("data", GsonConstructor.get().toJsonTree(data));
  123 + return jsonObject.toString();
  124 + }
104 @ApiOperation("企业微信消息") 125 @ApiOperation("企业微信消息")
105 @RequestMapping("/uploadWxMessage/{sCorpID}") 126 @RequestMapping("/uploadWxMessage/{sCorpID}")
106 public String uploadWxMessage(@PathVariable String sCorpID, HttpServletRequest httpServletRequest) 127 public String uploadWxMessage(@PathVariable String sCorpID, HttpServletRequest httpServletRequest)
@@ -14,6 +14,26 @@ public class MonitorServerUploadDto { @@ -14,6 +14,26 @@ public class MonitorServerUploadDto {
14 @ApiModelProperty("系统连接数(%%)") 14 @ApiModelProperty("系统连接数(%%)")
15 private Integer connection_count; 15 private Integer connection_count;
16 16
  17 + @ApiModelProperty("内存信息")
  18 + private String memory_info;
  19 + @ApiModelProperty("cpu信息")
  20 + private String cpu_info;
  21 +
  22 + public String getMemory_info() {
  23 + return memory_info;
  24 + }
  25 +
  26 + public void setMemory_info(String memory_info) {
  27 + this.memory_info = memory_info;
  28 + }
  29 +
  30 + public String getCpu_info() {
  31 + return cpu_info;
  32 + }
  33 +
  34 + public void setCpu_info(String cpu_info) {
  35 + this.cpu_info = cpu_info;
  36 + }
17 37
18 public Double getCpu_usage() { 38 public Double getCpu_usage() {
19 return cpu_usage; 39 return cpu_usage;
@@ -26,8 +26,18 @@ get_system_performance() { @@ -26,8 +26,18 @@ get_system_performance() {
26 # 获取系统连接数 26 # 获取系统连接数
27 CONNECTION_COUNT=\$(netstat -an | grep ESTABLISHED | wc -l) 27 CONNECTION_COUNT=\$(netstat -an | grep ESTABLISHED | wc -l)
28 28
29 - # 返回JSON格式的数据  
30 - echo "{\"cpu_usage\": \"\${CPU_USAGE}\", \"memory_usage\": \"\${MEMORY_USAGE}\", \"disk_usage\": \"\${DISK_USAGE}\", \"connection_count\": \"\${CONNECTION_COUNT}\"}" 29 + # 获取前10进程的内存详情,使用 "fg9527" 分隔符
  30 + MEMORY_INFO=\$(ps aux --sort=-rss | head -n 11 | awk 'NR==1 {print "USERfg9527PIDfg9527MEMORY(M)fg9527COMMAND"; next} {cmd=""; for(i=11;i<=NF;i++) cmd=cmd\$i" "; printf "%sfg9527%sfg9527%.2fMfg9527%s\n", \$1, \$2, \$6/1024, cmd}' | tr '\n' ';')
  31 +
  32 + # 获取前10进程的CPU详情,使用 "fg9527" 分隔符
  33 + CPU_INFO=\$(ps aux --sort=-%cpu | head -n 11 | awk 'NR==1 {print "USERfg9527PIDfg9527CPU(%)fg9527COMMAND"; next} {cmd=""; for(i=11;i<=NF;i++) cmd=cmd\$i" "; printf "%sfg9527%sfg9527%.2f%%fg9527%s\n", \$1, \$2, \$3, cmd}' | tr '\n' ';')
  34 +
  35 + # 生成 JSON 格式数据,转义双引号
  36 + MEMORY_INFO=\$(echo "\$MEMORY_INFO" | sed 's/"/\\"/g')
  37 + CPU_INFO=\$(echo "\$CPU_INFO" | sed 's/"/\\"/g')
  38 +
  39 + # 构建JSON数据
  40 + echo "{\"cpu_usage\": \"\${CPU_USAGE}\", \"memory_usage\": \"\${MEMORY_USAGE}\", \"disk_usage\": \"\${DISK_USAGE}\", \"connection_count\": \"\${CONNECTION_COUNT}\", \"memory_info\": \"\${MEMORY_INFO}\", \"cpu_info\": \"\${CPU_INFO}\"}"
31 } 41 }
32 42
33 # 获取当前系统性能数据 43 # 获取当前系统性能数据
@@ -52,4 +62,5 @@ systemctl restart crond @@ -52,4 +62,5 @@ systemctl restart crond
52 $SCRIPT_PATH 62 $SCRIPT_PATH
53 63
54 echo "Monitor setup completed." 64 echo "Monitor setup completed."
  65 +
55 # 解决:curl: (35) Peer reports incompatible or unsupported protocol version. 方法: yum update -y nss curl libcurl 66 # 解决:curl: (35) Peer reports incompatible or unsupported protocol version. 方法: yum update -y nss curl libcurl