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

几个月前开始使用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
时间: 2024-09-30 04:41:13

分享一个VPS系统监控资源的脚本【干货】的相关文章

Linux Vps系统防CC攻击脚本代码

Linux Vps系统防CC攻击自动拉黑IP脚本分2个版本,普通版是加入到crontab计划任务执行的,每5分钟执行一次.增强版主要是为了弥补用crontab执行时间间隔最低只能是1分钟的不足,可以让CC防护更严密,甚至每隔1S执行一次! 功能说明:通过netstat -an命令统计出当前请求并发大于100的IP,然后将不在白名单的IP自动加入DROP规则 使用说明: 1.在Linux系统下将以下代码保存为shell脚本,比如:deny_ip.sh,并执行chmod+x deny_ip.sh加执

建设DevOps统一运维监控平台,全面的系统监控你做好了吗?

随着Devops.云计算.微服务.容器等理念的逐步落地和大力发展,机器越来越多,应用越来越多,服务越来越微,应用运行基础环境越来多样化,容器.虚拟机.物理机不一而足.面对动辄几百上千个虚拟机.容器,数十种要监控的对象,现有的监控系统还能否支撑的住?来自于容器.虚拟机.物理机.网络设备.中间件的指标数据如何采用同一套方案快速.完整的收集和分析告警?怎样的架构.技术方案才更适合如此庞大繁杂的监控需求呢 一.统一监控平台架构解析 先做一下回顾,统一监控平台由七大角色构成:监控源.数据采集.数据存储.数

分享一个SQLSERVER脚本

原文:分享一个SQLSERVER脚本 分享一个SQLSERVER脚本 很多时候我们都需要计算数据库中各个表的数据量很每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(50) , rowsinfo BIGINT , reserved VARCHAR(20) , datainfo VARCHAR(20) , index_size VARCHAR(20) , unused VARCHAR(20) ) DECLARE @

有没有好人送我一个VPS啊,电信申请的资源被清空了,需要一个vps来发布项目,你懂的,屌丝是没钱去买的...

问题描述 去年申请的电信vps免费用了5个月这个月被清空资源了现在需要一个vps网上找了国外的资源但是没申请成功,这里有大神有闲置的么,借一个哥们用用呗 解决方案 解决方案二:新浪sae有接近免费的部署项目,百度bae也可以,一天4毛解决方案三:弄个免费的.解决方案四:多屌丝呢美国VPS一个月几十块钱都用不起

分享一个入门级可控多线程shell脚本代码_linux shell

说到shell可控多线程,网上分享的大部分是管道控制的方案.这种方案,张戈博客也曾经实战并分享过一次:<Shell+Curl网站健康状态检查脚本,抓出中国博客联盟失联站点>,感兴趣的朋友可以看看. 分享一个入门级可控多线程shell脚本方案 下面张戈博客再分享另一种更容易理解的入门级可控多线程shell脚本方案:任务切割.各个击破. 先来 1 段场景描述: 某日,在鹅厂接到了这个任务,需要在Linux服务器中,对几千个IP进行一次Ping检测,只要取得ping可达的IP就好.如果单个IP去pi

分享一个批量导出当前实例下的所有linkedserver脚本

原文:分享一个批量导出当前实例下的所有linkedserver脚本 分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linkedserver导出来,但是密码不会显示出来 下面脚本在SQL2008 R2下面测试通过 -- ============================================= -- Author: <桦仔> -- Blog

分享yahoo公司查看Linux系统硬件信息的脚本

首先,介绍一个网上流传的yahoo公司的曾经一个用于收集硬件信息的脚本,你可以在这里查看和下载hwconfig.下载地址:https://github.com/smilejay/shell/blob/master/sh2012/hwconfig.它在我的某系统上执行的情况如下:  代码如下 复制代码 [root@jay-linux test-programs]# ./hwconfig Summary:        QCI QSSC-S4R, 1 x 000 2.27GHz, 47.1GB /

Monitorix :支持服务器和树莓派的轻量级系统监控系统

Monitorix :支持服务器和树莓派的轻量级系统监控系统 有时候,无论是普通用户还是系统管理员,都需要知道系统运行是否良好.与系统状态相关的许多问题,都可以通过检查运行的服务所生成的日志文件来获得答案.然而,即便对于干过几年的系统管理员而言,要检查日志文件的每个细节都不是件容易的事.这也是为什么他们依赖于监控软件的原因,监控软件能够从不同的源收集信息,并以易于理解的格式给出分析报告,如图表.可视化图像.统计数据等. 市面上流传着许多复杂的系统监控软件,诸如Cacti, Nagios, Zab

如何设计一个RPC系统

RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高.但是RPC本身的构成却比较复杂,由于受到编程语言.网络模型.使用习惯的约束,有大量的妥协和取舍之处.本文就是通过分析几种流行的RPC实现案例,提供大家在设计RPC系统时的参考. 由于RPC底层的网络开发一般和具体使用环境有关,而编程实现手段也非常多样化,但不影响使用者,因此本文基本涉及如何实现一个RPC系统. 认识RPC(远程调用) 我们在各种操作系统.编程语言生态圈中,多少