# 系统资源很简单,都是linux现成的命令调用下就可以了 #
注意的是
- 硬盘占用需要区分以那个分区占用为准还是整个硬盘的占用,不然会出现前端显示硬盘还没用完,实际使用的分区已经被日志写满的情况
- cpu的实时百分比占用率经过调用返回是不准确的,因为每调用一次脚本,本身就会造成cpu占用,这可不就是量子纠缠测不准原则,准确的方法是调用方定时采样cpu用量,由调用方来计算占用率百分比,% = (cpuUsed1-cpuUsed2)/(cpuTotal1-cpuTotal2)
需要检测其他任何资源都加进去就可以了
# 获取cpu、内存、硬盘、客户端ip、连接数
function sf_cpu() {
local ngxNum=`netstat -tnp|grep 18040|grep -v 127.0.0.1|wc -l`
local diskFree=`df|grep dev |awk 'NR>1{print $4}' |awk 'BEGIN{x=0} {x=x+$1 } END{print x}'`
local diskUsed=`df|grep dev |awk 'NR>1{print $3}' |awk 'BEGIN{x=0} {x=x+$1 } END{print x}'`
local diskTotal=`df|grep dev |awk 'NR>1{print $2}' |awk 'BEGIN{x=0} {x=x+$1 } END{print x}'`
local memFree=`free |grep Mem |awk '{print $4}'`
local memUsed=`free |grep Mem |awk '{print $3}'`
local memTotal=`free |grep Mem |awk '{print $2}'`
local cpuUsed=`awk 'BEGIN{used=0} /cpu / { used=$2+$3+$4+$7+$8 }END{print used}' /proc/stat`
local cpuTotal=`awk 'BEGIN{total=0} /cpu / {for(i=2;i<=NF;i++);total+=i}END{print $total}' /proc/stat`
local cpuPercent=`top -b -n1 | grep Cpu | awk '{print 100-$8,"%"}'`
local clientip=`netstat -tlpna |grep -i ESTABLISHED| awk '{print $5}' |grep -v ::|grep -v 127.|grep -v 0.0.0|grep -iv And|grep -iv address|awk -F ":" '{print $1","}'| sort -u|xargs echo`
local rjson="{\"cpuTotal\":\""$cpuTotal"\",\"cpuUsed\":\""$cpuUsed"\",\"memTotal\":\""$memTotal"\",\"memUsed\":\""$memUsed"\",\"memFree\":\""$memFree"\",\"diskTotal\":\""$diskTotal"\",\"diskUsed\":\""$diskUsed"\",\"diskFree\":\""$diskFree"\",\"ngxNum\":\""$ngxNum"\",\"cpuPercent\":\""$cpuPercent"\",\"clientip\":\""$clientip"\"}"
echo $rjson
}
返回json格式方便前端解析
脚本可以提供业务层单独调用
也可以cgi服务挂载在ngx下提供调用,json格式,方便传输和解析