[分享一个人]分享一个VPS系统监控资源的脚本【干货】

更新时间:2019-10-05    来源:网页配色    手机版     字体:

【www.bbyears.com--网页配色】

几个月前开始使用VPS,每月限制300GB流量,流量方便基本够用了,但是有时候由于受到一些恶意访问,导致CPU、Memory等资源消耗较大,导致VPS上的博客网站响应时间太慢甚至有时根本无法打开网页。所以,我简单做了个脚本来进行监控和发邮件报警。

由于不是做很专业的运维,暂时不想上很专业的监控工具,如:Nagios、Puppet、Cacti、Zabbix等,所以自己手动了个Shell脚本来监控我关心的CPU、Load、Memory、网络传输、博客网站能否打开等内容。将该监控脚本分享如下:

https://github.com/smilejay/shell/blob/master/sh2013/vps_monitor.sh

 代码如下 #!/bin/bash
#set -x
# the script to monitor my VPS
# It will alert when memory, load, CPU%, networking, httpd/mysqld or home-page
# is in an abnormal state.
# author: Jay
# date: 2013-10-16
 
EMAIL="smile665@gmail.com"
WARN_MSG=""
 
# alert when free memory is less than 50 MB
function mem_free()
{
        threshold=50 # 50 MB free memory
        free_mem=$(free -m | grep "buffers/cache" | awk "{print $4}")
        if [ $free_mem -lt $threshold ]; then
                WARN_MSG=$WARN_MSG"Free memeory is less than $threshold MB.n"
                return 1
        fi
        return 0
}
 
# alert when load (5min) is larger than 4
function load_avg()
{
        threshold=4 # load is 4
        load_5min=$(cat /proc/loadavg | awk "{print $2}")
        if [ $(echo "$load_5min > $threshold" | bc) -eq 1 ]; then
        WARN_MSG=$WARN_MSG"5min average load is larger than $threshold.n"
                return 1
        fi
        return 0
}
 
# alert when CPU idle% is less than 20%
function cpu_idle()
{
        threshold=20 # CPU idle% 20%
        cpu_idle=$(sar 1 5 | grep -i "Average" | awk "{print $NF}")
        if [ $(echo "$cpu_idle < $threshold" | bc) -eq 1 ]; then
                # in printf cmd, %% represents a single %
                WARN_MSG=$WARN_MSG"CPU idle%% is less than $threshold%%.n"
                return 1
        fi
        return 0
}
 
# alert when networking tx speed is larger than 80 kB/s
function network_tx()
{
        threshold=80 # TX speed 80 kB/s
        interface=eth0
        tx_speed=$(sar -n DEV 10 5 | grep "Average" | grep "$interface" | awk "{print $6}")
        if [ $(echo "$tx_speed > $threshold" | bc) -eq 1 ]; then
                WARN_MSG=$WARN_MSG"networking TX speed is larger than $threshold kB/s.n"
                return 1
        fi
        return 0
}
 
# alert when httpd or mysqld process doesn"t exist
function httpd_mysqld()
{
        ps -ef | grep "httpd" | grep -v "grep"
        if [ $? -ne 0 ]; then
                WARN_MSG=$WARN_MSG"httpd process doesn"t exist.n"
                return 1
        else
                ps -ef | grep "mysqld" | grep -v "grep"
                if [ $? -ne 0 ]; then
                        WARN_MSG=$WARN_MSG"mysqld process doesn"t exist.n"
                        return 1
                fi
        fi
        return 0
}
 
# alert when "Stay hungry" doesn"t exist in the home page http://smilejay.com/
function home_page()
{
        url=http://smilejay.com/
        keywords="Stay hungry"
        curl -sL $url | grep -i "$keywords"
        if [ $? -ne 0 ]; then
                WARN_MSG=$WARN_MSG"keywords "$keywords" doesn"t exist on link $url.n"
                return 1
        fi
        return 0
}
 
# use an array to store the return value of each monitoring function
mem_free
chk[1]=$?
load_avg
chk[2]=$?
cpu_idle
chk[3]=$?
network_tx
chk[4]=$?
httpd_mysqld
chk[5]=$?
home_page
chk[6]=$?
 
# send warning email to the web master if any of the check fails.
for i in $(seq 1 6)
do
        if [ ${chk[i]} -ne 0 ]; then
                printf "$WARN_MSG" | mailx -s "Warning from smilejay.com" $EMAIL
                exit 1
        fi
done

本文来源:http://www.bbyears.com/wangyezhizuo/71321.html