如何用shell脚本监控服务器负载、cpu、内存、硬盘和登录用户数

说明:此脚本安装在CentOS的操作系统上

一、监控脚本如下

vim  /root/script/systemmonitor.sh

#!/bin/bash
#监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。

#提取本服务器的IP地址信息
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`

# 1、监控系统负载的变化情况,超出时发邮件告警:

#抓取cpu的总核数
cpu_num=`grep -c ‘model name‘ /proc/cpuinfo`

#抓取当前系统15分钟的平均负载值
load_15=`uptime | awk ‘{print $12}‘`

#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`

#取上面平均负载值的个位整数
average_int=`echo $average_load | cut -f 1 -d "."`

#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
load_warn=0.70

#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
if (($average_int > 0)); then
echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mail -s "$IP 服务器系统负载严重告警!!!"   [email protected]
else

#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
load_now=`expr $average_load \> $load_warn`

#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
if (($load_now == 1)); then
echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mail -s "$IP 服务器系统负载告警"  [email protected]
fi

fi

# 2、监控系统cpu的情况,当使用超过80%的时候发告警邮件:

#取当前空闲cpu百份比值(只取整数部分)
cpu_idle=`top -b -n 1 | grep Cpu | awk ‘{print $5}‘ | cut -f 1 -d "."`

#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
if (($cpu_idle < 20)); then
echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mail -s "$IP 服务器CPU告警" [email protected]
fi

# 3、监控系统交换分区swap的情况,当使用超过90%的时候发告警邮件:

#系统分配的交换分区总量
swap_total=`free -m | grep Swap | awk ‘{print $2}‘`

#当前剩余的交换分区free大小
swap_free=`free -m | grep Swap | awk ‘{print $4}‘`

#当前已使用的交换分区used大小
swap_used=`free -m | grep Swap | awk ‘{print $3}‘`

if (($swap_used != 0)); then
#如果交换分区已被使用,则计算当前剩余交换分区free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`

#设置交换分区的告警值为10%(即使用超过90%的时候告警)。
swap_warn=0.10

#当前剩余交换分区百分比与告警值进行比较(当大于告警值(即剩余10%以上)时会返回1,小于(即剩余不足10%)时会返回0 )
swap_now=`expr $swap_per \> $swap_warn`

#如果当前交换分区使用超过90%(即剩余小于10%,上面的返回值等于0),立即发邮件告警
if (($swap_now == 0)); then
echo "$IP服务器swap交换分区只剩下 $swap_free M 未使用,剩余不足10%,使用率已经超过90%,请及时处理。" | mail -s "$IP 服务器内存告警" [email protected]
fi

fi

# 4、监控系统硬盘根分区使用的情况,当使用超过80%的时候发告警邮件:

#取当前根分区(/dev/sda2)已用的百份比值(只取整数部分)
disk_sda2=`df -h | grep /dev/sda2 | awk ‘{print $5}‘ | cut -f 1 -d "%"`

#设置空闲硬盘容量的告警值为80%,如果当前硬盘使用超过80%,立即发邮件告警
if (($disk_sda2 > 80)); then
echo "$IP 服务器 /根分区 使用率已经超过80%,请及时处理。" | mail -s "$IP 服务器硬盘告警" [email protected]
fi

#5、监控系统用户登录的情况,当用户数超过3个的时候发告警邮件:

#取当前用户登录数(只取数值部分)
users=`uptime | awk ‘{print $6}‘`

#设置登录用户数的告警值为3个,如果当前用户数超过3个,立即发邮件告警
if (($users >= 3)); then
echo "$IP 服务器用户数已经达到$users个,请及时处理。" | mail -s "$IP 服务器用户数告警" [email protected]
fi

二、给脚本添加执行权限

chmod  +x   /root/script/systemmonitor.sh

三、将脚本加入计划任务

cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/


# For details see man 4 crontabs


# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed


*/1 * * * *  root  /root/script/systemmonitor.sh

四、发邮件到自己注册的163邮箱

(1)首先要安装mailx

yum  install  -y   mailx

(2) 其次配置mail.rc,配置文件如下

cat  /etc/mail.rc
# This is the configuration file for Heirloom mailx (formerly
# known under the name "nail".
# See mailx(1) for further options.
# This file is not overwritten when ‘make install‘ is run in
# the mailx build process again.

# Sccsid @(#)nail.rc    2.10 (gritter) 3/4/06

# Do not forward to mbox by default since this is likely to be
# irritating for most users today.
set hold

# Append rather than prepend when writing to mbox automatically.
# This has no effect unless ‘hold‘ is unset again.
set append

# Ask for a message subject.
set ask

# Assume a CRT-like terminal and invoke a pager.
set crt

# Messages may be terminated by a dot.
set dot

# Do not remove empty mail folders in the spool directory.
# This may be relevant for privacy since other users could
# otherwise create them with different permissions.
set keep

# Do not remove empty private mail folders.
set emptybox

# Quote the original message in replies by "> " as usual on the Internet.
set indentprefix="> "

# Automatically quote the text of the message that is responded to.
set quote

# Outgoing messages are sent in ISO-8859-1 if all their characters are
# representable in it, otherwise in UTF-8.
set sendcharsets=iso-8859-1,utf-8

# Display sender‘s real names in header summaries.
set showname

# Display the recipients of messages sent by the user himself in
# header summaries.
set showto

# Automatically check for new messages at each prompt, but avoid polling
# of IMAP servers or maildir folders.
set newmail=nopoll

# If threaded mode is activated, automatically collapse thread.
set autocollapse

# Hide some header fields which are uninteresting for most human readers.
ignore received in-reply-to message-id references
ignore mime-version content-transfer-encoding

# Only include selected header fields when forwarding messages.
fwdretain subject date from to

# For Linux and BSD, this should be set.
set bsdcompat
set [email protected]
set smtp=smtp.163.com
set [email protected]
set smtp-auth-password=wxhjshfjsjdfsjdfjdhjdsfh       #这个是163.com的POP开通验证码
set smtp-auth=login
set ssl-verify=ignore

(3)重启邮件服务,如果没有sendmail就yum安装yum  install -y  sendmail

service  sendmail  restart     ##二次,第一次失败

service  sendmail  restart    ##第二次成功

 

(4)验证

echo  "test"  | mail -s "test"  [email protected]

(5)查看163.com的邮箱发现有邮件说明成功

这里要先开通163的邮件协议,开通之前要开通验证码这个只出现一次要记好,这个就是mail.rc的smtp-auth-password密码,之前不需要,现在163改变了。

时间: 2024-10-09 05:33:44

如何用shell脚本监控服务器负载、cpu、内存、硬盘和登录用户数的相关文章

一个统计 CPU 内存 硬盘 使用率的shell脚本

一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 #!/bin/bash #This script is use for describle CPU Hard Memery Utilization total=0 idle=0 system=0 user=0 nice=0 mem=0 vmexec=/usr/bin/vmstat which sar > /dev/null 2>&1 if [ $? -ne 0 ] then ver=`vmstat -V | awk

shell脚本监控服务器状态

一.mutt的安装                                            1 yum -y install postfix 2 #需要安装sendmail并开启防火墙的25端口,如果你需要收邮件110端口也要开 3 yum -y install mutt 二.配置信息                                                 关于配置信息,有一点需要说明的,网上很多教程都说,编辑/root/.muttrc以修改配置文件,我想说

监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。

[email protected]:~$ cat warning.sh #!/bin/bash #监控系统负载与CPU.内存.硬盘.登录用户数,超出警戒值则发邮件告警.    前提安装mail服务  [email protected] #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`    # 1.监控系统负载的变化情况

VPS性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench和压力测试

现在便宜的VPS主机越来越多了,一些美国的VPS主机甚至给出1美元一月的VPS,堪比虚拟主机还要便宜,巨大的价格优势吸引不少人购买和使用,而近些年来国内的主机商也开始意识到便宜的VPS对草根站长的诱惑力,纷纷推出了低价VPS,其中突出的代表就是阿里云. 所谓“一分钱一分货”,把VPS当成虚拟主机来卖的如果不是做慈善事业就是超售严重,买回来的VPS到底值不值这个价钱,我们一般需要对VPS主机进行一番性能测试,涉及的项目主要有CPU内存,硬盘IO读写,带宽速度,UnixBench和压力测试等等. 本

Linux 查看机器配置,及cpu/内存/硬盘使用率

Linux下怎样查看机器配置啊?cpu/内存/硬盘 dmesg显示开机信息.kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息亦保存在/var/log目录中,名称为dmesg的文件里 dmesg|grep hd硬盘dmesg|grep cpucpudmesg|grep proc内存dmesg|grep redhat操作系统dmesg|more更多信息uname -a操作系统版本 查看linux cpu和内存利用率2008-07-1

Windows 性能监视器的基本指标(CPU,内存,硬盘参数)

转载:http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题,因此,今天给出Windows 性能监视器的一些基本指标(CPU,内存,硬盘参数),希望对大家将来优化和分析问题提供帮忙. Windows -Processor 指标名称 指标描述 指标范围 指标单位 CPU利用率(% Processor Time) % Pr

shell脚本精华----在10秒内SSH登录失败次数超过3次就使用iptables/tcpwrappers拒绝

#!/bin/bash while true do badip=$(lastb -i -a | awk '/ssh:notty/ {print $NF}'|sort|uniq -c|awk '($1>3) {print $2}') for i in $badip do iptables -t filter -I INPUT -s $i -p tcp --dport 22 -j DROP done : > /var/log/btmp sleep 10s done shell脚本精华----在10

如何用shell脚本编译java工程

编译java工程一般直接用IDE或者用Ant.Maven之类的工具,很少有人用纯shell来编译java工程.正好遇到这样一个应该,用这篇博文做一下记录. 案例:本人用eclipse写了一个java project,然后编译打成jar包. 这个可以采用eclipse自带的Export就可以导出jar了.但是为了软件自动化等巴拉巴拉的原因,采用存shell脚本编译. 如图所示,java project的名称为iec104,下面src是源文件目录,bin是所引用的jar包目录,现在要进行编译,并且打

cpu 内存 硬盘 指令以及他们之间的关系

CPU对整个计算机系统的运行是至关重要的,它不仅要与计算机的其他功能部件进行信息交换,还要控制这些功能部件的操作.也就是说cpu是一台计算机的运算核心和控制核心. 内存是与cpu直接交换数据的内部存储器,它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介但是内存不能保留数据.当电源关闭时,就会失去数据的储存.如果需要保存数据,就必须把它们写入一个长期的存储设备中,如硬盘. 硬盘采用的持久储存方式,跟内存的区别在于内存断电即失去数据的储存.但是相比较于内存,硬盘