页面效果
第一版
第一版页面效果
第二版
第二版页面效果,采用MDUI设计,调用免费的IP-API接口获取IP地址信息。
第三版
第三版页面效果,更换图表,采用EChart,并添加了持续监控图
删除了多语言支持(ThinkPHP开发者的懈怠BUG,必须精确匹配语言,不支持默认语言)
第四版
合并内存显示
添加网络流量图
方案选择
简简单单的服务器监控Python+展示平台ThinkPHP5,用到redis缓存
推荐使用免费的redis服务器redislab,可以免费使用30MB。
Plan A
使用外部Redis方案,利用免费的RedisLab。
服务器上报到RedisLab,网站服务器读取RedisLab数据展示。
Plan B
使用本地Redis方案。
网站服务器采用OpenResty解决高并发,读取本地Redis,被监控服务器通过网站服务器Lua直接鉴权写入Redis。
数据库字段
Redis
system_monitor:stat:(IP) —— String
系统动态信息json字段
{
"Connection": 21,
"Disk": {
"total": 0,
"used": 1,
"free": 2,
"percent": 3
},
"Uptime": "1 Days 10 Hours 2 Minutes",
"Memory": {
"Swap": {
"total": 0,
"used": 1,
"free": 2
},
"Mem": {
"total": 0,
"used": 1,
"free": 2
}
},
"Load": {
"1min": 0,
"5min": 1,
"15min": 2
},
"Process": 100
}
system_monitor:info:(IP) —— HashMap
系统静态信息json字段
{
"CPU": "8x Intel(R) Xeon E5-1650 @3501MHz",
"System Version": "Centos 7",
"IPV4": "0.0.0.0",
"IPV6": "::1",
"Update Time": 1590238712
}
system_monitor:hashes —— HashMap
哈希值对应IP,用于隐藏真实IP
(IP转换为Hash, IP)
system_monitor:nodes —— Set
用于保存服务器IP列表
参数获取方式
进程数
ps aux | wc -l
CPU信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq
CPU核心数
cat /proc/cpuinfo | grep cores | wc -l
CPU频率
cat /proc/cpuinfo | grep MHz| cut -f2 -d: | uniq
内存信息(总数、使用、空闲)
free -m | grep -E '(Mem|Swap)' | awk -F' ' '{print $2,$3,$4}'
系统版本
什么lsb_release、uname -a
测试了很多个获取版本的方法,还是这个最稳
cat /etc/redhat-release
磁盘信息(总数、使用、剩余、百分比)
获取根目录磁盘信息
df -h --total /|grep total|awk -F' ' '{print $2,$3,$4,$5}'
网络信息(IPV4、IPV6、连接数)
鉴于部分minimal安装的机器无法使用ifconfig
直接使用ip addr解决
ip addr show scope global|grep inet\ |awk -F' ' '{print $2}' #ipv4
ip addr show scope global|grep inet6|awk -F' ' '{print $2}' #ipv6
netstat -na|grep ESTABLISHED|wc -l #建立的连接
获取开机时间
cat /proc/uptime|awk -F' ' '{print $1}'
获取CPU平均占用
后期需要用split处理包含的逗号
uptime|awk -F'load average:' '{print $2}'
项目
Demo
监控站点(安全性未知)
(待更新)