作者 钟来

服务器运维系统监控修改

... ... @@ -2,9 +2,12 @@ package com.zhonglai.luhui.admin.controller.monitor;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.web.domain.Server;
... ... @@ -37,10 +40,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.StringReader;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
... ... @@ -83,6 +83,8 @@ public class ServerController extends BaseController
sysMonitorServer.setConnection_count(monitorServerUploadDto.getConnection_count());
sysMonitorServer.setMemory_usage(new Double(monitorServerUploadDto.getMemory_usage()*100).intValue());
sysMonitorServer.setDisk_usage(new Double(monitorServerUploadDto.getDisk_usage()*100).intValue());
sysMonitorServer.setCpu_info(tranPsAux(monitorServerUploadDto.getCpu_info()));
sysMonitorServer.setMemory_info(tranPsAux(monitorServerUploadDto.getMemory_info()));
if(st==0)
{
sysMonitorServer.setCreate_time(System.currentTimeMillis());
... ... @@ -98,9 +100,28 @@ public class ServerController extends BaseController
sysMonitorServerLog.setMemory_usage(sysMonitorServer.getMemory_usage());
sysMonitorServerLog.setDisk_usage(sysMonitorServer.getDisk_usage());
sysMonitorServerLog.setCreate_time(System.currentTimeMillis());
sysMonitorServerLog.setCpu_info(sysMonitorServer.getCpu_info());
sysMonitorServerLog.setMemory_info(sysMonitorServer.getMemory_info());
publicService.insert(sysMonitorServerLog);
return AjaxResult.success();
}
private String tranPsAux(String princmd)
{
String[] auxs = princmd.split(";");
String[] auxHead = auxs[0].split("fg9527");
List<String[]> data = new ArrayList<>();
for (int i=1;i<auxs.length;i++)
{
String[] aux = auxs[i].split("fg9527");
data.add(aux);
}
JsonObject jsonObject = new JsonObject();
jsonObject.add("header", GsonConstructor.get().toJsonTree(auxHead));
jsonObject.add("data", GsonConstructor.get().toJsonTree(data));
return jsonObject.toString();
}
@ApiOperation("企业微信消息")
@RequestMapping("/uploadWxMessage/{sCorpID}")
public String uploadWxMessage(@PathVariable String sCorpID, HttpServletRequest httpServletRequest)
... ...
... ... @@ -14,6 +14,26 @@ public class MonitorServerUploadDto {
@ApiModelProperty("系统连接数(%%)")
private Integer connection_count;
@ApiModelProperty("内存信息")
private String memory_info;
@ApiModelProperty("cpu信息")
private String cpu_info;
public String getMemory_info() {
return memory_info;
}
public void setMemory_info(String memory_info) {
this.memory_info = memory_info;
}
public String getCpu_info() {
return cpu_info;
}
public void setCpu_info(String cpu_info) {
this.cpu_info = cpu_info;
}
public Double getCpu_usage() {
return cpu_usage;
... ...
... ... @@ -26,8 +26,18 @@ get_system_performance() {
# 获取系统连接数
CONNECTION_COUNT=\$(netstat -an | grep ESTABLISHED | wc -l)
# 返回JSON格式的数据
echo "{\"cpu_usage\": \"\${CPU_USAGE}\", \"memory_usage\": \"\${MEMORY_USAGE}\", \"disk_usage\": \"\${DISK_USAGE}\", \"connection_count\": \"\${CONNECTION_COUNT}\"}"
# 获取前10进程的内存详情,使用 "fg9527" 分隔符
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' ';')
# 获取前10进程的CPU详情,使用 "fg9527" 分隔符
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' ';')
# 生成 JSON 格式数据,转义双引号
MEMORY_INFO=\$(echo "\$MEMORY_INFO" | sed 's/"/\\"/g')
CPU_INFO=\$(echo "\$CPU_INFO" | sed 's/"/\\"/g')
# 构建JSON数据
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}\"}"
}
# 获取当前系统性能数据
... ... @@ -52,4 +62,5 @@ systemctl restart crond
$SCRIPT_PATH
echo "Monitor setup completed."
# 解决:curl: (35) Peer reports incompatible or unsupported protocol version. 方法: yum update -y nss curl libcurl
... ...