系统监控

简介:
 
  1. #!/bin/bash 
  2. #System Monitoring Script 
  3. while [ 1 ] 
  4. do 
  5. #本机需开启postfix或sendmail服务。 
  6. #报警邮件地址设置 
  7. MAILFROM=monitor@zhaoyun.com 
  8. MAILTO=zhaoyun006@163.com 
  9. #设置脚本运行间隔时间。单位(秒)。 
  10. RUNTIME=1 
  11. #内存使用率监控设置,单位 (%) 
  12. MEMTHRE=90 
  13. #流量监控设置 
  14. #要监控的网卡 
  15. ETHX=eth0 
  16. #填写大于多少MB的时候发送警报,单位(MB) 
  17. INFLOWTHREMB=50 
  18. OUTFLOWTHREMB=50 
  19. #填写大于多少KB的时候发送警报,单位(KB) 
  20. INFLOWTHREKB=500 
  21. OUTFLOWTHREKB=500 
  22. #TCP连接状态数量监控设置 
  23. #填写最大连接的个数 
  24. TIME_WAIT=10 
  25. FIN_WAIT1=20 
  26. FIN_WAIT2=20 
  27. ESTABLISHED=20 
  28. SYN_RECV=10 
  29. CLOSE_WAIT=10 
  30. CLOSING=10 
  31. LAST_ACK=10 
  32. #CPU使用率监控设置 
  33. #填写cpu使用率大于多少发送报警,单位(%) 
  34. CPUTHRE=5 
  35. #硬盘使用大小设置 
  36. #填写硬盘占用率,单位(%) 
  37. ROOT=80 
  38. VAR=100 
  39. USR=100 
  40. BOOT=80 
  41. #调试模式开关。(YES/NO) 
  42. DBUG=NO 
  43. #                 监 控 脚 本 执 行 内 容       
  44. ################################################################################ 
  45. time=`date +"%Y-%m-%d %H:%M:%S"` 
  46. #内存监控部分 
  47. NULL=/dev/null 
  48. MEM=`free -m |grep Mem |awk '{print $3/$2*100}'` 
  49. MEMB=`free -m |grep Mem |awk '{print $2,$4+$6+$7}'|awk '{print $1,$1-$2}'| awk '{print $2/$1*100}'` 
  50. #echo $MEM 
  51. #echo $MEMB 
  52. MA=`expr $MEM \> $MEMTHRE ` 
  53. if [ $MA -eq 1 ] ; then 
  54. sendmail -t <<EOF 
  55. from: $MAILFROM 
  56. to:$MAILTO 
  57. subject: warning 
  58.   
  59. $time MEM内存警告,当前内存占用率为$MEM %,大于$MEMTHRE %. 
  60. EOF 
  61.     fi 
  62. MB=`expr $MEMB \> $MEMTHRE` 
  63. if [ $MB -eq 1 ] ; then 
  64. sendmail -t <<EOF 
  65. from: $MAILFROM 
  66. to:$MAILTO 
  67. subject: warning 
  68.   
  69. $time MEMB内存警告,当前内存占用率为$MEMB %,大于$MEMTHRE % 
  70. EOF 
  71.     fi 
  72.  
  73. #流量监控部分 
  74. FLOWA=/tmp/.flow 
  75. ifconfig $ETHX |grep "RX byte" |awk '{print $2"    "$6}' |awk -Fbytes: '{print "INPUT  "$2"OUTPUT  "$3}'\ > $FLOWA 
  76. INPUTA=`cat $FLOWA |awk '{print $2}'` 
  77. OUTPUTA=`cat $FLOWA |awk '{print $4}'` 
  78. sleep 1 
  79. ifconfig $ETHX |grep "RX byte" |awk '{print $2"    "$6}' |awk -Fbytes: '{print "INPUT  "$2"OUTPUT  "$3}'\ > $FLOWA 
  80. INPUTB=`cat $FLOWA |awk '{print $2}'` 
  81. OUTPUTB=`cat $FLOWA |awk '{print $4}'` 
  82. INPUTC=`echo "$INPUTB-$INPUTA" | bc` 
  83. OUTPUTC=`echo "$OUTPUTB-$OUTPUTA"| bc` 
  84. INPUTMBA=`echo "$INPUTC/1024"|bc` 
  85. OUTPUTMBA=`echo "$OUTPUTC/1024"|bc` 
  86. INMBF=/tmp/.inputMB 
  87. OUTMBF=/tmp/.outputMB 
  88. echo `echo "scale=4;$INPUTMBA/1024"|bc`MB > $INMBF 
  89. echo `echo "scale=4;$OUTPUTMBA/1024"|bc`MB > $OUTMBF 
  90. INMB=`cat $INMBF |awk '{print $1}'` 
  91. OUTMB=`cat $OUTMBF |awk '{print $1}'` 
  92.   if [ $INPUTMBA -gt 1024 ] ; then 
  93.               if [ $INMB -gt $INFLOWTHREMB ] ;then 
  94. sendmail -t <<EOF 
  95. from: $MAILFROM 
  96. to:$MAILTO 
  97. subject: warning 
  98. $time 流量警告,当前流量异常,请登录服务器查看。当前速率$INMB MB/秒,大于$INFLOWTHREMB MB/秒。 
  99. EOF 
  100.               fi 
  101.     if [ $OUTMB -gt $OUTFLOWTHREMB ] ;then 
  102. sendmail -t <<EOF 
  103. from: $MAILFROM 
  104. to:$MAILTO 
  105. subject: warning 
  106. $time 流量警告,当前流量异常,请登录服务器查看。当前速率$OUTMB MB/秒 大于$OUTFLOWTHREMB MB/秒。 
  107. EOF 
  108.     fi 
  109. else 
  110. INKBF=/tmp/.inputKB 
  111. OUTKBF=/tmp/.outputKB 
  112. echo $INPUTMBA KB > $INKBF 
  113. echo $OUTPUTMBA KB > $OUTKBF 
  114. INKB=`cat $INKBF |awk '{print $1}'` 
  115. OUTKB=`cat $OUTKBF |awk '{print $1}'` 
  116.               if [ $INKB -gt $INFLOWTHREKB ] ; then 
  117. sendmail -t <<EOF 
  118. from: $MAILFROM 
  119. to:$MAILTO 
  120. subject: warning 
  121. $time 流量警告,当前流量异常,请登录服务器查看。$INKB KB/秒 大于$INFLOWTHREKB KB/秒。 
  122. EOF 
  123.               fi 
  124.     if [ $OUTKB -gt $OUTFLOWTHREKB ] ;then 
  125. sendmail -t <<EOF 
  126. from: $MAILFROM 
  127. to:$MAILTO 
  128. subject: warning 
  129. $time 流量警告,当前流量异常,请登录服务器查看。当前速率$OUTKB KB/秒大于$INFLOWTHREKB KB/秒。 
  130. EOF 
  131.     fi 
  132. fi 
  133. #连接数 
  134. tcpfile=/tmp/.tcp 
  135. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' >$tcpfile 
  136. grep TIME_WAIT $tcpfile > $NULL 
  137. if [ $? -eq 1 ] ; then 
  138. echo "TIME_WAIT 0 " >> $tcpfile 
  139. fi 
  140. grep FIN_WAIT1 $tcpfile > $NULL 
  141. if [ $? -eq 1 ] ; then 
  142. echo "FIN_WAIT1 0 " >> $tcpfile 
  143. fi 
  144. grep FIN_WAIT2 $tcpfile  > $NULL 
  145. if [ $? -eq 1 ] ; then 
  146. echo "FIN_WAIT2 0 " >> $tcpfile 
  147. fi 
  148. grep CLOSE_WAIT $tcpfile  > $NULL 
  149. if [ $? -eq 1 ] ; then 
  150. echo "CLOSE_WAIT 0 " >> $tcpfile 
  151. fi 
  152. grep LAST_ACK $tcpfile  > $NULL 
  153. if [ $? -eq 1 ] ; then 
  154. echo "LAST_ACK 0 " >> $tcpfile 
  155. fi 
  156. grep SYN_RECV $tcpfile  > $NULL 
  157. if [ $? -eq 1 ] ; then 
  158. echo "SYN_RECV 0 " >> $tcpfile 
  159. fi 
  160. grep CLOSING $tcpfile  > $NULL 
  161. if [ $? -eq 1 ] ; then 
  162. echo "CLOSING 0 " >> $tcpfile 
  163. fi 
  164. grep ESTABLISHED $tcpfile  > $NULL 
  165. if [ $? -eq 1 ] ; then 
  166. echo "ESTABLISHED 0 " >> $tcpfile 
  167. fi 
  168.  
  169. TIME_WAITV=`grep TIME_WAIT $tcpfile | awk '{print $2}'` 
  170. FIN_WAIT1V=`grep FIN_WAIT1 $tcpfile | awk '{print $2}'` 
  171. FIN_WAIT2V=`grep FIN_WAIT2 $tcpfile | awk '{print $2}'` 
  172. ESTABLISHEDV=`grep ESTABLISHED $tcpfile | awk '{print $2}'` 
  173. SYN_RECVV=`grep SYN_RECV $tcpfile | awk '{print $2}'` 
  174. CLOSINGV=`grep CLOSING $tcpfile | awk '{print $2}'` 
  175. CLOSE_WAITV=`grep CLOSE_WAIT $tcpfile | awk '{print $2}'` 
  176. LAST_ACKV=`grep LAST_ACK $tcpfile | awk '{print $2}'` 
  177.   if [ $ESTABLISHEDV -gt $ESTABLISHED ] ; then 
  178. sendmail -t <<EOF 
  179. from: $MAILFROM 
  180. to:$MAILTO 
  181. subject: warning 
  182. $time 连接数警告,当前ESTABLISHED连接数异常,请登录服务器查看。当前连接数为$ESTABLISHEDV个,大于$ESTABLISHED个 
  183. EOF 
  184.   fi 
  185.   if [ $SYN_RECVV -gt $SYN_RECV ] ; then 
  186. sendmail -t <<EOF 
  187. from: $MAILFROM 
  188. to:$MAILTO 
  189. subject: warning 
  190. $time 连接数警告,当前SYN_RECV连接数异常,请登录服务器查看。当前连接数为$SYN_RECVV个,大于$SYN_REC个。 
  191. EOF 
  192.   fi 
  193.  if [ $CLOSE_WAITV -gt $CLOSE_WAIT ] ; then 
  194. sendmail -t <<EOF 
  195. from: $MAILFROM 
  196. to:$MAILTO 
  197. subject: warning 
  198. $time 连接数警告,当前CLOSE_WAIT连接数异常,请登录服务器查看。当前连接数为$CLOSE_WAITV个,大于$CLOSE_WAIT个。 
  199. EOF 
  200.   fi 
  201.   if [ $CLOSINGV -gt $CLOSING ] ; then 
  202. sendmail -t <<EOF 
  203. from: $MAILFROM 
  204. to:$MAILTO 
  205. subject: warning 
  206. $time 连接数警告,当前CLOSING连接数异常,请登录服务器查看。当前连接数为$CLOSINGV个,大于$CLOSING个。 
  207. EOF 
  208.   fi 
  209.   if [ $LAST_ACKV -gt $LAST_ACK ] ; then 
  210. sendmail -t <<EOF 
  211. from: $MAILFROM 
  212. to:$MAILTO 
  213. subject: warning 
  214. $time 连接数警告,当前LAST_ACK连接数异常,请登录服务器查看。当前连接数为$LAST_ACKV个,大于$LAST_ACK个。      
  215. EOF 
  216.   fi 
  217. if [ $TIME_WAITV -gt $TIME_WAIT ] ; then 
  218. sendmail -t <<EOF 
  219. from: $MAILFROM 
  220. to:$MAILTO 
  221. subject: warning 
  222. $time 连接数警告,当前TIME_WAIT连接数异常,请登录服务器查看。当前连接数为$TIME_WAITV个,大于$TIME_WAIT个。      
  223. EOF 
  224.   fi 
  225. if [ $FIN_WAIT1V -gt $FIN_WAIT1 ] ; then 
  226. sendmail -t <<EOF 
  227. from: $MAILFROM 
  228. to:$MAILTO 
  229. subject: warning 
  230. $time 连接数警告,当前FIN_WAIT1连接数异常,请登录服务器查看。当前连接数为$FIN_WAIT1V个,大于$FIN_WAIT1个。    
  231. EOF 
  232.   fi 
  233. if [ $FIN_WAIT2V -gt $FIN_WAIT2 ] ; then 
  234. sendmail -t <<EOF 
  235. from: $MAILFROM 
  236. to:$MAILTO 
  237. subject: warning 
  238. $time 连接数警告,当前FIN_WAIT2连接数异常,请登录服务器查看。当前连接数为$FIN_WAIT2V个,大于$FIN_WAIT2个。 
  239. EOF 
  240.   fi 
  241. DISKF=/tmp/.disk 
  242. df -h > $DISKF 
  243. grep var $DISKF > $NULL 
  244. if [ $? -eq 1 ] ; then 
  245. echo "/dev/sda1 20G  1.6G   17G   0% /var" >> $DISKF 
  246. fi 
  247. grep usr $DISKF > $NULL 
  248. if [ $? -eq 1 ] ; then 
  249. echo "/dev/sda1 20G  1.6G   17G   0% /usr" >> $DISKF 
  250. fi 
  251. grep boot $DISKF > $NULL 
  252. if [ $? -eq 1 ] ; then 
  253. echo "/dev/sda1 20G  1.6G   17G   0% /boot" >> $DISKF 
  254. fi 
  255. BOOTV=`cat $DISKF | grep boot  | awk '{print $5}'|awk -F% '{print $1}'` 
  256. VARV=`cat  $DISKF  | grep var  | awk '{print $5}'|awk -F% '{print $1}'` 
  257. USRV=`cat  $DISKF  | grep usr  | awk '{print $5}'|awk -F% '{print $1}'` 
  258. grep VolGroup $DISKF > $NULL 
  259. if [ $? -eq 0 ] ;then 
  260. ROOTV=`cat $DISKF | sed -n '3p' |awk '{print $4}'|awk -F% '{print $1}'` 
  261. else 
  262. ROOTV=`cat $DISKF | sed -n '2p'|awk '{print $5}'|awk -F% '{print $1}'` 
  263. fi 
  264. if [ $ROOTV -gt $ROOT ] ; then 
  265. sendmail -t <<EOF 
  266. from: $MAILFROM 
  267. to:$MAILTO 
  268. subject: warning 
  269. $time 磁盘使用警告,您监控的 /  分区已经大于你设置的数值$ROOT %,详情登陆系统查看,目前使用率为$ROOTV %. 
  270. EOF 
  271. fi 
  272. if [ $VARV -gt $VAR ] ; then 
  273. sendmail -t <<EOF 
  274. from: $MAILFROM 
  275. to:$MAILTO 
  276. subject: warning 
  277. $time 磁盘使用警告,您监控的 /var 分区已经大于你设置的数值$VAR %,详情登陆系统查看,目前使用率为$VARV %. 
  278. EOF 
  279. fi 
  280. if [ $BOOTV -gt $BOOT ] ; then 
  281. sendmail -t <<EOF 
  282. from: $MAILFROM 
  283. to:$MAILTO 
  284. subject: warning 
  285. $time 磁盘使用警告,您监控的 /boot  分区已经大于你设置的数值 $BOOT %,详情登陆系统查看,目前使用率为$BOOTV %. 
  286. EOF 
  287. fi 
  288. if [ $USRV -gt $USR ] ; then 
  289. sendmail -t <<EOF 
  290. from: $MAILFROM 
  291. to:$MAILTO 
  292. subject: warning 
  293. $time 磁盘使用警告,您监控的 /usr  分区已经大于你设置的数值$USR %,详情登陆系统查看,目前使用率为$USRV %. 
  294. EOF 
  295. fi 
  296. #CPU 
  297. TotalA=`cat /proc/stat | sed -n '1p' | awk '{print $2+$3+$4+$5+$6+$7+$8}'` 
  298. IDLEA=`cat /proc/stat |sed -n '1p' |awk '{print $5}'` 
  299. sleep 2 
  300. TotalB=`cat /proc/stat | sed -n '1p' | awk '{print $2+$3+$4+$5+$6+$7+$8}'` 
  301. IDLEB=`cat /proc/stat |sed -n '1p' |awk '{print $5}'` 
  302. Total=`echo "$TotalB-$TotalA" |bc` 
  303. Idle=`echo "$IDLEB-$IDLEA" |bc` 
  304. USAGE=`echo "$Idle/$Total*100"|bc -l` 
  305. RATE=`echo "100-$USAGE "|bc -l` 
  306. USERATE=`echo "scale=2;$RATE/1"|bc`% 
  307. CA=`expr $USERATE \> $CPUTHRE` 
  308. if [ $CA -eq 1 ] ; then 
  309. sendmail -t <<EOF 
  310. from: $MAILFROM 
  311. to:$MAILTO 
  312. subject: warning 
  313. $time CPU使用警告,您监控的CPU使用率,已经超过您设置的限额$CPUTHRE % ,当前CPU使用率为$USERATE . 
  314. EOF 
  315. fi 
  316. CPURATE=`top -b -n 1 |grep Cpu | awk '{print $5}' |awk -F%id '{print 100-$1}'` 
  317. CB=`expr $CPURATE \> $CPUTHRE` 
  318. if [ $CB -eq 1  ] ; then 
  319. sendmail -t <<EOF 
  320. from: $MAILFROM 
  321. to:$MAILTO 
  322. subject: warning 
  323. $time CPU使用警告,您监控的CPU使用率,已经超过您设置的限额$CPUTHRE %,当前CPU使用率为$CPURATE . 
  324. EOF 
  325. fi 
  326. DBUGS=YES 
  327. if [ "$DBUGS" == "$DBUG" ] ; then 
  328. echo "           "'& 内  存 &' ;echo \ ; 
  329. echo "  "当前程序占用内存为 $MEMB % ,总占用内存为 $MEM % ; echo \ ; 
  330. echo "           "'& 流  量 &'; echo \ ; 
  331. YA=`wc -l $INMBF > /dev/null 2>&1 ; echo $?` 
  332.     if [ $YA -eq 1 ] ; then 
  333. echo 0 > $INMBF 
  334.     fi 
  335. IN=`expr $INMB \> $INFLOWTHREMB >$NULL; echo $? ` 2> $NULL 
  336.          if [ $IN -eq 1 ] ; then 
  337. echo "    "当前输入流量为 $INMB MB/秒 .;  
  338. echo "    "当前输入流量为 $INKB KB/秒 .;  
  339.           fi 
  340. YB=`wc -l $OUTMBF > /dev/null 2>&1 ; echo $?` 
  341.        if [ $YB -eq 1 ] ; then 
  342. echo 0 > $OUTMBF 
  343.         fi 
  344. OUT=`expr $OUTMB \> $OUTFLOWTHREMB >$NULL ; echo $?` 2> $NULL 
  345.     if [ $OUT -eq 1 ] ; then 
  346. echo "    "当前输出流量为 $OUTMB MB/秒。 ;   
  347. echo "    "当前输出流量为 $OUTKB KB/秒。 ; echo \ ; 
  348.     fi 
  349. echo "           "'& 连接数 &' ; echo \ ; 
  350. echo "    "当前TIME_WAIT"  " 连接数为 $TIME_WAITV 个。 
  351. echo "    "当前FIN_WAIT1"  " 连接数为 $FIN_WAIT1V 个。 
  352. echo "    "当前FIN_WAIT2"  " 连接数为 $FIN_WAIT2V 个。 
  353. echo "    "当前CLOSE_WAIT" " 连接数为 $CLOSE_WAITV 个。 
  354. echo "    "当前ESTABLISHED"" 连接数为 $ESTABLISHEDV 个。 
  355. echo "    "当前SYN_RECV"   " 连接数为 $SYN_RECVV 个。 
  356. echo "    "当前LAST_ACKV"  " 连接数为 $LAST_ACKV 个。 
  357. echo "    "当前CLOSING"    " 连接数为 $CLOSINGV 个。; echo \ ; 
  358. echo "         "'& CPU使用率 &' ; echo \ ; 
  359. echo "    "当前CPU 进程使用率为 $USERATE  . ;echo \ ; 
  360. echo "         "'& 磁盘使用率 &' ; echo \ ; 
  361. echo "    "当前"  "/"  "分区,"  "使用率为 $ROOTV %. 
  362. echo "    "当前/var 分区, 使用率为 $VARV %. 
  363. echo "    "当前/boot分区, 使用率为 $BOOTV %. 
  364. echo "    "当前/usr 分区, 使用率为 $USRV %. 
  365. exit  
  366. fi 
  367. sleep $RUNTIME 
  368. done 

 

 
  1. 运行方法,在后台运行。 
  2. [root@AR log]# ./monitor & 
  3. 停止方法 
  4. [root@AR log]# ps -aux |grep monitor | grep -v grep | awk '{print $2}' | xargs kill -9 

本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/745955,如需转载请自行联系原作者

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
分布式计算 资源调度 Java
YarnJMX监控
YarnJMX监控
85 2
|
8月前
|
Prometheus Kubernetes 监控
k8s的监控
k8s的监控
140 0
|
监控 Java
|
数据采集 消息中间件 监控
系统监控+性能监控|学习笔记
快速学习系统监控+性能监控
163 0
系统监控+性能监控|学习笔记
|
监控
服务监控(中)
服务监控(中)
125 0
服务监控(中)
|
存储 监控 网络协议
服务监控(下)
服务监控(下)
128 0
服务监控(下)
|
监控 前端开发
服务监控(上)
服务监控(上)
196 0
服务监控(上)
|
监控 NoSQL 关系型数据库
服务性能监控都包括哪些指标?
Apache性能监控支持以下指标: Apache吞吐率 Apache并发连接数 Apache并发连接数详细统计,包括读取请求、持久连接、发送响应内容、关闭连接、等待连接 Lighttpd性能监控支持以下指标: Lighttpd吞吐率 Lighttpd并发连接数 Lighttpd并发连接数详细统计,...
1279 0
|
监控 Linux UED
一种对云主机进行性能监控的监控系统及其监控方法
本发明提供了一种对云主机进行性能监控的监控系统及监控方法,所述监控方法同时通过云主机Agent模块、计算节点Agent模块以及站点监控模块采集云主机的虚拟资源利用状态进行监控以获得监控数据。
2724 0

相关课程

更多