监控Linux系统资源使用情况

用于监控linux系统使用情况的shell

参考:https://www.cnblogs.com/yepei/p/7216945.html

#!/bin/bash
#统一写下接收监控邮件的邮箱
mail_account="[email protected]"

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

#提取本服务器的IP地址信息
IP=`/sbin/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,请立即处理!!!" | mutt -s "${IP} 服务器系统负载严重告警!!!" ${mail_account}
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,请及时处理。" | mutt -s "${IP} 服务器系统负载告警" ${mail_account}
#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%,请及时处理。" | mutt -s "${IP} 服务器CPU告警" ${mail_account}
fi

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

#系统分配的交换分区总量
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`

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

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

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

fi

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

for i in `df -h | grep -v Filesystem | awk ‘{ print $5 }‘ | cut -f 1 -d ‘%‘`; do
if (( $i >= 80 ));then
echo "${IP} 服务器硬盘使用率已经超过80%,请及时处理。" | mutt -s "${IP} 服务器硬盘告警" ${mail_account}
fi
done

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

#设置空闲硬盘容量的告警值为80%,如果当前硬盘使用超过80%,立即发邮件告警
#if (($disk_sda2 > 80)); then
#echo "${IP} 服务器 /根分区 使用率已经超过80%,请及时处理。" | mutt -s "${IP} 服务器硬盘告警" ${mail_account}
#fi
#########usr分区监控###########
#disk_sda5=`df -h | grep /dev/sda5 | awk ‘{print $5}‘ | cut -f 1 -d "%"`

#设置空闲硬盘容量的告警值为80%,如果当前硬盘使用超过80%,立即发邮件告警
#if (($disk_sda5 > 80)); then
#echo "${IP} 服务器 /usr 使用率已经超过80%,请及时处理。" | mutt -s "${IP} 服务器硬盘告警" ${mail_account}
#fi
#########home分区监控###########
#disk_sda8=`df -h | grep /dev/sda8 | awk ‘{print $5}‘ | cut -f 1 -d "%"`

#设置空闲硬盘容量的告警值为80%,如果当前硬盘使用超过80%,立即发邮件告警
#if (($disk_sda8 > 80)); then
#echo "${IP} 服务器 /home 使用率已经超过80%,请及时处理。" | mutt -s "${IP} 服务器硬盘告警" ${mail_account}
#fi

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

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

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

#6、监控网络连接数的情况,连接数大于2000时发告警邮件
conn_num=`netstat -nat | grep -i "80" | wc -l`

#设置网络连接数告警值为2000,如果连接数超过2000,立即发邮件告警
if (($conn_num >= 2000)); then
echo "${IP} 服务器网络连接数已经达到${conn_num}个,请及时处理。" | mutt -s "${IP} 服务器并发连接数" ${mail_account}
fi

#7、监控服务器账号表,用md5sum方法加密,存储到一个文件内,两个对比,如果不匹配发出报警
default_md5=`cat /script/md5`
Check_md5=`md5sum /etc/passwd | awk ‘{print $1}‘`
#用户表发生变化,理解发出报警
if [ "$Check_md5"x != "$default_md5"x ]; then
echo "${IP} 服务器用户表发生变化,请及时处理。" | mutt -s "${IP} 服务器用户表告警" ${mail_account}
fi

#8、监控服务器密码表,用md5sum方法加密,存储到一个文件内,两个对比,如果不匹配发出报警
default_passwd5=`cat /script/passwdmd5`
Check_passwd5=`md5sum /etc/shadow | awk ‘{print $1}‘`
#用户表发生变化,理解发出报警
if [ "${Check_passwd5}"x != "${default_passwd5}"x ]; then
echo "${IP} 服务器密码发生变化,请及时处理。" | mutt -s "${IP} 服务器用户表告警" ${mail_account}
fi

#9、监控网站文件,查看是否有异常文件,如果发现立即报
abno_num=`php /root/chk.php scan /home/wwwroot/ | grep -v "xx" | grep -v "chk.php" | wc -l`
#判断个数,因为执行完没有异常的话会输出一行空行,所以要判断有几个,再判断是否是异常文件
if ((${abno_num} > 1)); then
php /root/chk.php scan /home/wwwroot/ | grep -v "xx" | grep -v "chk.php" > /script/abno_file
echo "${IP} 服务器网站发现异常文件${abno_num}个,请及时处理。" |  mutt -s "${IP} 服务器网站异常文件告警" ${mail_account}
fi

原文地址:https://www.cnblogs.com/yoyowin/p/12066970.html

时间: 2024-12-21 22:50:04

监控Linux系统资源使用情况的相关文章

Nagios监控Linux系统资源使用情况 -- Nagios介绍篇

应用场景:测试环境以及运行时环境都需要实时监控程序来监控系统(Linux Redhat)的健康状态,监控需求主要集中在:CPU,Memory,Disk IO,Network使用情况 . Nagios的基本思想就是nagios server 获取被监控节点(monitored server)的相关信息,通过CGI(Web GUI)或者邮件等方式展示给管理员. 以前我有介绍过如何通过jmeter+jmeter-plugins来监控系统资源使用情况,有了Nagios之后我们就放弃了使用jmeter,因

实战Nagios NSCA方式监控Linux系统资源使用情况 -- Nagios配置篇 -- 被监控端

Nagios要求被监控端按照约定格式定时将数据发送到Nagios端.监控包括节点和服务2种. 节点监控约定数据格式如下: [<timestamp>] PROCESS_HOST_CHECK_RESULT;<host_name>;<host_status>;<plugin_output> 格式很容易理解,数据提交时间戳,被监控节点名称,节点状态(UP/DOWN/UNREARCHABLE),插件自定义的额外数据.状态具体每个字段的解释如下: 1. timestam

实战Nagios NSCA方式监控Linux系统资源使用情况 -- Nagios配置篇 -- Nagios Server端

关于nrpe的方式网上已经有很多很好的总结,我现在说说在我们系统中如何是用NSCA方式来获取我们需要的被监控节点的资源使用情况信息. 先讲讲Nagios Server端的基本配置: 1. nagios web gui 访问配置,系统中使用的是nagios core中推荐的配置方式,通过apache httpd访问nagios web,安装nagios的时候会自动寻找系统中安装的httpd,把nagios的httpd文件放到httpd的conf.d目录下,这样,只要生成一次nagios web访问

Lr监控linux系统资源方法

1.监控linux系统需要开启rstatd和xinetd两个服务,查看系统是否配置rstatd.xinetd守护进程:   输入命令:rpcinfo -p查看rstatd服务   输入命令:rpm -q xinetd查看xinetd服务 2. 监控linux系统需要安装下载4个服务包:(1)rpc.rstatd-4.0.1.tar.gz(2)rsh-0.17-14.i386.rpm (3)rsh-server-0.17-14.i386.rpm (4)xinetd-2.3.14-10.el5.i3

LoadRunner如何监控Linux系统资源

一 简述:LoadRunner监控Linux资源时弹出如下错误: Monitor name :UNIX Resources. Cannot initialize the monitoring on 192.168.52.189. Error while creating the RPC client. Ensure that the machine can be connected and that it runs the rstat daemon (use rpcinfo utility fo

Linux系统资源使用情况

概述: 用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况... 还有一种办法是 ps -ef | sort -k7 ,将进程按运行时间排序,看哪个进程消耗的cpu时间最多. top:      主要参数 d:指定更新的间隔,以秒计算.q:没有任何延迟的更新.如果使用者有超级用户,则top命令将会以最高的优先序执行.c:显示进程完整的路径与名称.S

LR杂记-nmon+analyser监控linux系统资源

1.查看linux具体版本号信息 file /sbin/init 2.下载相应nmon版本号 http://pkgs.repoforge.org/nmon/ 3.安装 rpm -ivh nmon-14f-1.el5.rf.i386.rpm 4.採集数据 1)./nmon_x86_rhel52 -s10 -c60 -f -m . -s10 每 10 秒採集一次数据. -c60 採集 60 次,即为採集十分钟的数据. -f 生成的数据文件名称中包括文件创建的时间. -m 生成的数据文件的存放文件夹.

Loadrunner监控Linux系统资源

一.安装rsh和rpcbind 1.查看是否安装:rpm -qa |grep rsh 2.安装rsh:yum -y install rsh* 3.yum  -y install nfs-utils rpcbind 二.安装rstatd 查看是否安装:find / -name rpc.rstatd 下载地址:http://files.cnblogs.com/files/xiaoxitest/rpc.rstatd-4.0.1.tar.gz 上传到Linux服务器 解压缩:tar -zxvf rpc.

监控Linux内存使用情况

cat mem.sh#!/bin/bashIP=`ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk -F ' ' '{print $2}'| awk -F':' '{print $2}'| head -n 1`     //获取IPMAX_mem=95MAX_swap=20Men=`free | awk '/Mem/ {print int($3/$2*100)}'`  //物理内存SWAP=`free | awk '/Swap/ {print