Server Monitoring Scripts
最近在帮组里维护服务器,写了几个简单的脚本,很久没更新了,顺便记录一下。服务器监控最重要的就是CPU
, RAM
和Disk
。RAM
达到100%的时候会导致服务器死机,重启,等一系列问题。所以为了防止服务器出现这种问题,我们需要做的就是在RAM
使用率达到100%之前就给KILL
或者设置一个阈值,当使用率达到阈值的时候发邮件通知正在跑程序的用户来及时的关闭正在执行的程序。为了安全问题,我这边没有设置自动KILL
的方式,因为KILL
别人启动的线程需要root权限。所以为了安全起见,还是通知用户自己去关闭的比较好。
Psutil
psutil是一个Python模块用来获取正在运行的进程信息和系统的CPU和内存的利用率。 类似Linux的ps、top和Windows的任务管理器等程序。可以通过少量的代码来实现服务器资源的监控。
安装
因为是python的库,所以直接使用pip3
来安装就行:
1 | pip3 install psutil |
示例
1 | import psutil |
psutil
还可以获取网络,磁盘,线程,内存等等的信息。感兴趣的可以去查一下。
线程监控
首先我们需要对所有的线程进行监控。监控的内容包括,线程的pid
, name
, username
, vms
以及运行时间(times
)等等。对vms
和时间的要求如下:
vms
使用率不超过95%times
不超过24小时
vms
的使用率很好算,直接通过简单的计算就能得到结果。但是程序运行的时间需要调用datetime
的库进行运算。程序实现如下:
1 | import psutil |
发邮件的方法可以参考smtplib
库。
服务器监控
我们不仅需要对线程进行监控,我们还需要对服务器整体状态进行监控,这个比较简单。程序如下:
1 | MINMEM = 4 # 4GB |
检测到服务器没有足够多的内存的时候我们可以强制停止正在运行的进程,避免宕机的存在。
部署
我们可以通过使用schedule
库来进行一个周期执行程序。比如我们可以每10分钟检查一次服务器的状态,每10个小时检查一下进程的运行时间等等。比如:
1 | import schedule |
在程序休眠的时候是不占用CPU资源的,所以大家不用担心改程序会占用太多资源,并且这个程序可以在几秒内完成检查,对CPU的使用基本可以忽略不记。