Linux使用shell腳本監控


(1)性能監控腳本 performance.sh

  1.   #!/bin/bash
  2.   #---------------------------------------------------------------------------------
  3.   # 說明,Linux服務器--性能監控腳本 ,網址來源:http://bbs.51cto.com/thread-937759-1.html
  4.   # 主要監控: 01.監控cpu系統負載 02. 監控cpu使用率 03. 監控交換分區 04. 監控磁盤空間
  5.   # 生成的性能監控日志 $path/performance_%Y%m%d.log
  6.   # 2017.06.25 djp
  7.   #---------------------------------------------------------------------------------
  8.    
  9.   path='/tmp/monitor/performance'
  10.    
  11.   #01.監控cpu系統負載
  12.   { #{{{
  13.   IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
  14.   cpu_num=`grep -c 'model name' /proc/cpuinfo`
  15.   count_uptime=`uptime |wc -w`
  16.   load_15=`uptime | awk '{print $'$count_uptime'}'`
  17.   average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
  18.   average_int=`echo $average_load | cut -f 1 -d "."`
  19.   load_warn=0.70
  20.   if [ $average_int -gt 0 ]
  21.   then
  22.   echo "$IP服務器單個核心15分鍾的平均負載為$average_load,超過警戒值1.0,請立即處理!!!$(date +%Y%m%d/%H:%M:%S)" >>$path/performance_$(date +%Y%m%d).log
  23.   echo "$IP服務器單個核心15分鍾的平均負載為$average_load,超過警戒值1.0,請立即處理!!!$(date +%Y%m%d/%H:%M:%S)" | mail -s "$IP服務器系統負載嚴重告警" XXXX@qq.com
  24.   else
  25.   echo "$IP服務器單個核心15分鍾的平均負載值為$average_load,負載正常 $(date +%Y%m%d/%H:%M:%S)">>$path/performance_$(date +%Y%m%d).log
  26.   fi
  27.   } #}}}
  28.    
  29.   #02. 監控cpu使用率
  30.   { #{{{
  31.   cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
  32.   if [ $cpu_idle -lt 20 ]
  33.   then
  34.    
  35.   echo "$IP服務器cpu剩余$cpu_idle%,使用率已經超過80%,請及時處理。">>$path/performance_$(date +%Y%m%d).log
  36.    
  37.   echo "$IP服務器cpu剩余$cpu_idle%,使用率已經超過80%,請及時處理!!!" | mail -s "$IP服務器cpu告警" XXXX@qq.com
  38.   else
  39.    
  40.   echo
  41.   "$IP服務器cpu剩余$cpu_idle%,使用率正常">>$path/performance_$(date +%Y%m%d).log
  42.   fi
  43.   } #}}}
  44.    
  45.   #03. 監控交換分區
  46.   { #{{{
  47.   swap_total=`free -m | grep Swap | awk '{print $2}'`
  48.   swap_free=`free -m | grep Swap | awk '{print $4}'`
  49.    
  50.   swap_used=`free -m | grep Swap | awk '{print $3}'`
  51.    
  52.   if [ $swap_used -ne 0 ]
  53.   then
  54.   swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`
  55.   swap_warn=0.20
  56.   swap_now=`expr $swap_per \> $swap_warn`
  57.   if [ $swap_now -eq 0 ]
  58.   then
  59.   echo "$IP服務器swap交換分區只剩下 $swap_free M 未使用,剩余不足20%,使用率已經超過80%,請及時處理。">>$path/performance_$(date +%Y%m%d).log
  60.    
  61.   echo "$IP服務器swap交換分區只剩下 $swap_free M 未使用,剩余不足20%, 使用率已經超過80%, 請及時處理。" | mail -s "$IP服務器內存告警" XXXX@qq.com
  62.   else
  63.   echo "$IP服務器swap交換分區剩下 $swap_free M未使用,使用率正常">>$path/performance_$(date +%Y%m%d).log
  64.   fi
  65.    
  66.   else
  67.   echo "$IP服務器交換分區未使用" >>$path/performance_$(date +%Y%m%d).log
  68.   fi
  69.   } #}}}
  70.    
  71.   #04. 監控磁盤空間
  72.   { #{{{
  73.   disk_sda1=`df -h | grep /dev/sda1 | awk '{print $5}' | cut -f 1 -d "%"`
  74.   if [ $disk_sda1 -gt 80 ]
  75.   then
  76.   echo "$IP服務器 /根分區 使用率已經超過80%,請及時處理。">>$path/performance_$(date +%Y%m%d).log
  77.    
  78.   echo "$IP服務器 /根分區 使用率已經超過80%,請及時處理。 " | mail -s "$IP服務器硬盤告警" XXXX@qq.com
  79.   else
  80.   echo "$IP服務器 /根分區 使用率為$disk_sda1%,使用率正常">>$path/performance_$(date +%Y%m%d).log
  81.   fi
  82.    
  83.   #監控登錄用戶數
  84.   users=`uptime |awk '{print $6}'`
  85.   if [ $users -gt 2 ]
  86.   then
  87.    
  88.   echo "$IP服務器用戶數已經達到$users個,請及時處理。">>$path/performance_$(date +%Y%m%d).log
  89.    
  90.   echo "$IP服務器用戶數已經達到$users個,請及時處理。" | mail -s "$IP服務器用戶登錄數告警" XXXX@qq.com
  91.   else
  92.    
  93.   echo "$IP服務器當前登錄用戶為$users個,情況正常">>$path/performance_$(date +%Y%m%d).log
  94.   fi
  95.   ###############################################################################
  96.    
  97.   } #}}}

 

(2) 進程監控腳本 process.sh  

  1.   #!/bin/bash#---------------------------------------------------------------------------------
  2.   # 說明,Linux服務器--進程監控腳本 ,網址來源:http://bbs.51cto.com/thread-937759-1.html
  3.   # 主要監控:
  4.   # 生成的進程監控日志
  5.   # 2017.06.25 djp
  6.   #---------------------------------------------------------------------------------
  7.    
  8.   path='/tmp/monitor/process'
  9.    
  10.   IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
  11.    
  12.   #tomcat_dir="/opt/apache-tomcat-7.0.8"
  13.   #mysql_dir="/usr/local/mysql/bin/mysqld_safe"
  14.   #vsftp_dir="/usr/sbin/vsftpd"
  15.   tomcat_dir=""
  16.   mysql_dir=""
  17.   vsftp_dir=""
  18.   ssh_dir="/usr/sbin/sshd"
  19.    
  20.   #進程監控
  21.   { #{{{
  22.   for dir in $tomcat_dir $mysql_dir $vsftp_dir $ssh_dir
  23.   do
  24.   process_count=$(ps -ef | grep "$dir" | grep -v grep | wc -l)
  25.    
  26.   for service in tomcat mysql vsftp ssh
  27.   do
  28.   echo "$dir" |grep -q "$service"
  29.   if [ $? -eq 0 ]
  30.   then
  31.   if [ $process_count -eq 0 ]
  32.   then
  33.   echo "$service is down at $(date +%Y%m%d%H:%M:%S)" >>$path/process_$(date +%Y%m%d).log
  34.   echo "$service is down at $(date +%Y%m%d%H:%M:%S)" | mail -s "$IP服務器 $service服務關閉告警" XXXX@qq.com
  35.   else
  36.   echo "$service is running at $(date +%Y%m%d%H:%M:%S)" >>$path/process_$(date +%Y%m%d).log
  37.   fi
  38.   else
  39.   continue
  40.   fi
  41.   done
  42.   done
  43.   } #}}}

 

(3) 流量監控腳本 network.sh

 

eth0的網口上分析報告會輸出到這些文件中:(不同的網卡目錄是對對應的網卡名稱)

 

/sys/class/net/eth0/statistics/rx_packets: 收到的數據包數據
/sys/class/net/eth0/statistics/tx_packets: 傳輸的數據包數量
/sys/class/net/eth0/statistics/rx_bytes: 接收的字節數
/sys/class/net/eth0/statistics/tx_bytes: 傳輸的字節數
/sys/class/net/eth0/statistics/rx_dropped: 當收到包數據包下降的數據量
/sys/class/net/eth0/statistics/tx_dropped: 傳輸包數據包下降的數據量
————————————————

 

  1. #!/bin/bash
  2. path='/tmp/monitor/network'
  3. mkdir -p $path
  4. R1=`cat /sys/class/net/eth0/statistics/rx_bytes`
  5. T1=`cat /sys/class/net/eth0/statistics/tx_bytes`
  6. sleep 1
  7. R2=`cat /sys/class/net/eth0/statistics/rx_bytes`
  8. T2=`cat /sys/class/net/eth0/statistics/tx_bytes`
  9. TBPS=`expr $T2 - $T1`
  10. RBPS=`expr $R2 - $R1`
  11. TKBPS=`expr $TBPS / 1024`
  12. RKBPS=`expr $RBPS / 1024`
  13. echo "上傳速率 eth0: $TKBPS kb/s 下載速率 eth0: $RKBPS kb/s at $(date +%Y%m%d%H:%M:%S)" >>$path/network_$(date +%Y%m%d).log

(4) 流量分析統計腳本 tongji.sh

  1.   #!/bin/bash
  2.   #---------------------------------------------------------------------------------
  3.   # 說明,Linux服務器--流量分析腳本 ,網址來源:http://bbs.51cto.com/thread-937759-1.html
  4.   # 主要監控: 流量分析
  5.   # 生成的流量分析日志
  6.   # 2017.06.25 djp
  7.   #---------------------------------------------------------------------------------
  8.    
  9.   path='/tmp/monitor/network'
  10.   mkdir -p $path
  11.    
  12.   TX=0;
  13.   RX=0;
  14.   MAX_TX=0;
  15.   MAX_RX=0;
  16.   while read line
  17.   do
  18.   a=`echo $line | grep "eth0" |awk '{print $3}'`
  19.   if [ $a -ge 0 ]
  20.   then
  21.   TX=$a
  22.   if [ $TX -ge $MAX_TX ]
  23.   then
  24.   MAX_TX=$TX
  25.   fi
  26.   fi
  27.   b=`echo $line | grep "eth0" |awk '{print $7}'`
  28.   if [ $b -ge 0 ]
  29.   then
  30.   RX=$b
  31.   if [ $RX -ge $MAX_RX ]
  32.   then
  33.   MAX_RX=$RX
  34.   fi
  35.   fi
  36.   done < $path/network_$(date +%Y%m%d).log
  37.   echo "最高上傳速度為 $MAX_TX kb/s at $(date +%Y%m%d)">>$path/tongji.log
  38.    
  39.   echo "最高下載速度為 $MAX_RX kb/s at $(date +%Y%m%d)">>$path/tongji.log


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM