創(chuàng)建一個腳本,名字叫sys_watch.sh。此腳本來源于《Linux shell 核心編程指南》,丁明一版本。 此腳本主要內(nèi)容為: 1、創(chuàng)建系統(tǒng)時間、ip、可用內(nèi)存、可用磁盤、cpu負載、登錄用戶、運行進程及其他vmstat的監(jiān)控統(tǒng)計命令。 2、通過命令執(zhí)行結(jié)果與閾值進行比較。如內(nèi)存小于1G、硬盤小于10G。 3、如果比較結(jié)果超過閾值,發(fā)送比較結(jié)果給郵箱。
遇到的問題: 如果mail -s 郵箱命令報錯,send-mail: fatal: parameter inet_interfaces: no local interface found for ::1 解決方案來源:https://blog.csdn.net/u013303402/article/details/53484093 1)vim /etc/postfix/main.cf 2)設(shè)置inet_interfaces = all 3)重啟service postfix restart
腳本如下: [root@yaomm test]# vi sys_watch.sh #/bin/bash
# 系統(tǒng)監(jiān)控腳本
# 系統(tǒng)時間 local_time=$(date +'Y%m%d %H:%M:%S')
# 本機ip awk {'print $2'}==>獲取第2組數(shù)據(jù) local_ip=$(ifconfig eth0 | grep netmask | awk {'print $2'} )
# 可用內(nèi)存 /proc/meminfo文件中存放了內(nèi)存使用信息 free_mem=$(cat /proc/meminfo | grep Avai | awk {'print $2'} )
# 可用磁盤 grep '/$' ==> 獲取以/結(jié)尾的行 free_disk=$(df | grep '/$' | awk {'print $3'})
# cpu負載 cpu_load=$(cat /proc/loadavg | awk {'print $3'} ) # 統(tǒng)計登錄用戶 login_user=$(who | wc -l)
# 統(tǒng)計運行進程 procs=$(ps aux | wc -l)
#---------------以下為vmstat統(tǒng)計數(shù)據(jù) # cpu中斷 irq=$( vmstat 1 2 | tail -n +4 | awk {'print $12'} )
# 上下文切換 cs=$( vmstat 1 2 | tail -n +4 | awk {'print $13'} )
# 用戶態(tài) usertime=$( vmstat 1 2 | tail -n +4 | awk {'print $14'})
# 系統(tǒng)態(tài) systime=$( vmstat 1 2 | tail -n +4 | awk {'print $15'})
# I/O 等待 iowait=$( vmstat 1 2 | tail -n +4 | awk {'print $17'})
#------------------以下為閾值比較命令,\分割長語句,當做一條命令
# 剩余內(nèi)存不足1G時發(fā)送郵件報警 if [[ $free_mem -lt 1048576 ]];then
# 打印內(nèi)存及ip發(fā)送郵件 echo '$local_time free memory not enough. \ free_mem:$free_mem on $local_ip' \ | mail -s Warning root@localhost fi
# 剩余磁盤不足10G時發(fā)送郵件報警 if [[ $free_mem -lt 1048576 ]];then
# 打印內(nèi)存及ip發(fā)送郵件 echo '$local_time free disk not enough. \ free_disk:$free_disk on $local_ip' \ | mail -s Warning root@localhost fi
# cpu 15分鐘平均負載超過4時發(fā)送郵件 # cpu_load有浮點數(shù),不能直接比較,需要用bc取整 #result=$(echo '$cpu_load > 4' | bc) if [[ $cpu_load > 4 ]];then
# 打印cpu負載發(fā)送郵件 echo '$local_time cpu load to high. \ cpu 15 avgload:$free_mem on $local_ip' \ | mail -s Warning root@localhost fi
# 在線人數(shù)超過3時告警 if [[ $login_user -gt 3 ]];then
# 打印發(fā)送郵件 echo '$local_time too many user. \ $login_user users login to $local_ip' \ | mail -s Warning root@localhost fi
# 進程數(shù)量大于500時發(fā)送告警 if [[ $procs -gt 500 ]];then
# 打印發(fā)送郵件 echo '$local_time cpu Too many procs. \ $procs proc are runing on $local_ip' \ | mail -s Warning root@localhost fi
# 其他,限于篇幅、時間,不再一一寫出 # cpu中斷大于5000告警
# cpu上下文切換大于5000告警
# 用戶態(tài)進程占用cpu超過70%告警
# 內(nèi)核態(tài)進程占用cpu超過70%告警
# cpu消耗大量時間在等待磁盤I/O超過40%告警
|