监控系统资源的shell脚本

简介:

centos 6.4 mutt发送邮件,配合crontab监控系统,本文为转载,修改内容较多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/bin/bash
#监控用户登录
IP=`ifconfig eth0 | sed -n  '2' p | awk  '{print $2}'  | awk -F ':'  '{print $2}' `
Usermonitor ()  {
     LoginUser=`uptime | awk  '{print $4}' `
     if  [ $LoginUser -ge  4  ]
         then
             Critical= "当前系统登录用户人数超过4人,具体人数为:$LoginUser个,请确认操作者人数。"
             status= 0
         else
             echo  "loginuser ok"
             status= 2
     fi
}
#监控内存
MemMonitor () {
     MemTotal=`free -m | grep Mem | awk -F:  '{print $2}'  | awk  '{print $1}' `
     MemFree=`free -m | grep cache | awk NR== 2  | awk  '{print $4}' `
     MemFreeB=`awk  'BEGIN{printf "%.2f%\n",' $MemFree/$MemTotal\* 100 '}' `
     MemFreeS=`awk  'BEGIN{printf "%.f",' $MemFree/$MemTotal\* 100 '}' `
     if  [ $MemFreeS -lt   10  ]
         then
             Critical= "系统可用内存小于10%,实际可用内存为:$MemFreeB ,请处理。"
             status= 0
         elif [ $MemFreeS -lt  20  ]
             then
                 Warning= "系统可用内存小于20%,实际可用内存为:$MemFreeB ,请查看。"
                 WarningT= "内存报警"
                 status= 1
             else
                 echo  "Mem OK"
                 status= 2
     fi
                                                            
}
#监控分区空间大小
DiskMonitorG () {
         Disk=`df -h | awk NR== 2  | awk  '{print $1}' `
     DiskGB=`df -h | awk NR== 2  | awk  '{print $5}' `
     DiskGS=`df -h | awk NR== 2  | awk  '{print $5}'  | awk -F%  '{print $1}' `
     if  [ $DiskGS -gt  90  ]
         then
             Critical= "$Disk 分区使用率超过90%,实际已使用 $DiskGB ,请处理。"
             status= 0
         elif [ $DiskGS -gt  80  -a $DiskGS -lt  90  ]
         then
             Warning= "$Disk 分区使用率超过80%,实际已使用 $DiskGB , 请查看。"
             WarningT= "$Disk 分区报警"
             status= 1
         else
             echo  "$Disk Ok"
             status= 2
     fi
         }
DiskMonitorA () {
         Apply=`df -h | awk NR== 2  | awk  '{print $1}' `
     ApplyB=`df -h | awk NR== 3  | awk  '{print $5}' `
     ApplyS=`df -h | awk NR== 3  | awk  '{print $5}'  | awk -F%  '{print $1}' `
     if  [ $ApplyS -gt  90  ]
         then
             Critical= "$Apply 分区使用率超过90%,实际已使用 $ApplyB ,请处理."
             status= 0
         elif [ $ApplyS -gt  80  -a $ApplyS -lt  90  ]
         then
             Warning= "$Apply 分区使用率超过80%,实际已使用 $ApplyB ,请查看。"
             WarningT= "$Apply 分区报警"
             status= 1
         else
             echo  "Apply ok"
             status= 2
     fi
}
#监控CPU负载
CPULoad () {
     CPULoad1=`uptime | awk  '{print $10}'  | awk -F.  '{print $1}' `
     CPULoad2=`uptime`
     if  [ $CPULoad1 -gt  5  ]
         then
             Critical= "CPU负载过高,请即使处理。 $CPULoad2 "
             status= 0
         elif [ $CPULoad1 -gt  3  -a $CPULoad1 -lt  5  ]
         then
             Warning= "CPU负载警告, $Warning "
             WarningT= "CPU负载报警"
             status= 1
         else
             echo  "CPU OK"
             status= 2
     fi
}
#监控服务状态
ServerMonitor () {
#服务状态监控
     timeout= 10
     makfails= 2
     fails= 0
     success= 0
NUM=`curl --connect-timeout  15  -s www.**.com`
NUM1=`echo $NUM | grep -Po  '(?<=B2\-).*(?=\<\/a)' ` #匹配网站的备案号或许可证
MATCH= 20130776
if  "$NUM1"  !=  "$MATCH"  ]
then
     Critical= "`date +%Y%m%d-%H:%M`: $NUM"
     status= 0
else
     echo  "web ok "
   status= 2
fi         
}
#发送报警邮件
for  in  Usermonitor MemMonitor DiskMonitorG DiskMonitorA CPULoad ServerMonitor
     do
         $n
         if  [ $status -eq  0  ]
             then
                 echo  "$n is $Critical"  |mutt -s  "$IP $n $Critical"  your_mail@ 163 .com
                                                                        
             elif [ $status -eq  1  ]
                 then
                 echo  "$n is $Warning"  |mutt -s  "$IP $n $Warning"  your_mail@ 163 .com
             else
                 echo  "ok"
         fi
done

运行脚本的显示结果

wKiom1N0ZnaxwyWyAABmsSsurj0235.jpg

实际的磁盘

wKioL1N0Zp6QiiMZAACpisdt5BQ612.jpg

163收到的邮件

wKioL1N0ZxaDqPp_AABlpfKjMq0443.jpg










本文转自 bbotte 51CTO博客,原文链接:http://blog.51cto.com/bbotte/1411863,如需转载请自行联系原作者
目录
相关文章
|
25天前
|
弹性计算 Shell Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
106 1
|
28天前
|
Java Shell
SpringBoot启动脚本Shell
SpringBoot启动脚本Shell
18 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
【Shell 命令集合 系统设置 】⭐⭐⭐Linux 限制进程资源 ulimit命令 使用指南
40 0
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
2天前
|
监控 Shell 应用服务中间件
第十二章 Shell脚本编写及常见面试题(二)
第十二章 Shell脚本编写及常见面试题(二)
|
2天前
|
监控 关系型数据库 Shell
第十二章 Shell脚本编写及常见面试题(一)
第十二章 Shell脚本编写及常见面试题(一)
|
2天前
|
监控 Shell
生产环境Shell脚本Ping监控主机是否存活(多种方法)
生产环境Shell脚本Ping监控主机是否存活(多种方法)
|
2天前
|
运维 Shell
Shell脚本判断IP是否合法性(多种方法)
Shell脚本判断IP是否合法性(多种方法)
|
8天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
33 0
|
9天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句