zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【老孙随笔】关羽和吕蒙——天才的失败
    【老孙随笔】项目经理要向唐骏学习
    WebService里奇怪的参数值偏移现象?
    [原创]让您的服务器不再有被挂马的烦恼文件安全卫士
    C#里也可以用上Eval函数了:)
    使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果
    支持算术运算、逻辑运算、位运算的表达式求值
    在Lambda表达式中进行递归调用
    认识Lambda表达式
    将你的QQ唠叨或QQ签名数据加入到博客上:)
  • 原文地址:https://www.cnblogs.com/mikew/p/11508835.html
Copyright © 2011-2022 走看看