menu LittleJake's Blog
color_lens
avatar
Jake Liu
Never Settle
creative commons by-nc-sa
hit
Category
keyboard_arrow_down

© 2024 LittleJake's Blog.

萌ICP备20223020号

(挖坑)服务器监控Python+展示平台ThinkPHP5

页面效果

第一版

第一版页面效果

monitor

第二版

第二版页面效果,采用MDUI设计,调用免费的IP-API接口获取IP地址信息。

monitor2
monitor2_1

第三版

第三版页面效果,更换图表,采用EChart,并添加了持续监控图
删除了多语言支持(ThinkPHP开发者的懈怠BUG,必须精确匹配语言,不支持默认语言)

monitor3
monitor3_1

第四版

合并内存显示
添加网络流量图

monitor4
monitor4_1

方案选择

简简单单的服务器监控Python+展示平台ThinkPHP5,用到redis缓存
推荐使用免费的redis服务器redislab,可以免费使用30MB。

Plan A

使用外部Redis方案,利用免费的RedisLab。
服务器上报到RedisLab,网站服务器读取RedisLab数据展示。

PlanA

Plan B

使用本地Redis方案。
网站服务器采用OpenResty解决高并发,读取本地Redis,被监控服务器通过网站服务器Lua直接鉴权写入Redis。

PlanB

数据库字段

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}'

项目

Github Page

Demo

Demo

监控站点(安全性未知)

NodeQuery
NIXSTATS

(待更新)

Buy me a beer
Jake Liu
Never Settle

Title: (挖坑)服务器监控Python+展示平台ThinkPHP5

Author: Jake Liu

Origin:

Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) For any re-post you must give appropriate credit.

文章遵循CC许可 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 转载请注明出处

Tag:thinkphp, openresty, lua, redis, 服务器, python, 监控, monitor

评论区

Add a new comment.

Theme