shell脚本监控系统资源并通过短信报警

释放双眼,带上耳机,听听看~!

目标分析:

所需的监控资源:
1、登陆用户数
2、CPU负载
3、服务探测
4、硬盘空间(根分区、应用分区、备份分区)
5、内存资源
短信接口、邮件接口
格式上传至附件

脚本:


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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
1#!/bin/bash
2
3#监控用户登录
4
5Usermonitor ()  {
6LoginUser=`uptime | awk '{print $6}'`
7
8if [ $LoginUser -ge 2 ]
9
10then
11
12Critical="当前系统登录用户人数超过1人,具体人数为:$LoginUser 个,请确认操作者人数。"
13
14status=0
15
16else
17
18echo "loginuser ok"
19
20status=1
21
22fi
23013.
24}
25
26#监控内存
27
28MemMonitor () {
29
30MemTotal=`free -m | grep Mem | awk -F: '{print $2}' | awk '{print $1}'`
31
32MemFree=`free -m | grep cache | awk NR==2 | awk '{print $4}'`
33
34MemFreeB=`awk 'BEGIN{printf "%.2f%\n",'$MemFree/$MemTotal\*100'}'`
35
36MemFreeS=`awk 'BEGIN{printf "%.f",'$MemFree/$MemTotal\*100'}'`
37
38if [ $MemFreeS -lt  10 ]
39
40then
41
42Critical="系统可用内存小于10%,实际可用内存为:$MemFreeB ,请处理。"
43
44status=0
45
46elif [ $MemFreeS -lt 20 ]
47
48then
49
50Warning="系统可用内存小于20%,实际可用内存为:$MemFreeB ,请查看。"
51
52WarningT="内存报警"
53
54status=1
55
56else
57
58echo "Mem OK"
59
60status=2
61
62fi
63
64}
65
66#监控分区空间大小
67
68DiskMonitorG () {
69
70#根分区
71
72DiskGB=`df -h | awk NR==2 | awk '{print $5}'`
73
74DiskGS=`df -h | awk NR==2 | awk '{print $5}' | awk -F% '{print $1}'`
75
76if [ $DiskGS -gt 90 ]
77
78then
79
80Critical="根分区使用率超过90%,实际已使用 $DiskGB ,请处理。"
81
82status=0
83
84elif [ $DiskGS -gt 80 -a $DiskGS -lt 90 ]
85
86then
87
88Warning="根分区使用率超过80%,实际已使用 $DiskGB , 请查看。"
89
90WarningT="根分区报警"
91
92status=1
93
94else
95
96echo "DiskGB Ok"
97
98status=2
99
100fi
101
102}
103
104DiskMonitorA () {
105
106#应用分区
107
108ApplyB=`df -h | awk NR==4 | awk '{print $5}'`
109
110ApplyS=`df -h | awk NR==4 | awk '{print $5}' | awk -F% '{print $1}'`
111
112if [ $ApplyS -gt 90 ]
113
114then
115
116Critical="应用分区使用率超过90%,实际已使用 $ApplyB ,请处理."
117
118status=0
119
120elif [ $ApplyS -gt 80 -a $ApplyS -lt 90 ]
121
122then
123
124Warning="应用分区使用率超过80%,实际已使用 $ApplyB ,请查看。"
125
126WarningT="应用分区报警"
127
128status=1
129
130else
131
132echo "Apply ok"
133
134status=2
135
136fi
137
138}
139
140#监控CPU负载
141
142CPULoad () {
143
144CPULoad1=`uptime | awk '{print $10}' | awk -F. '{print $1}'`
145
146CPULoad2=`uptime`
147
148if [ $CPULoad1 -gt 5 ]
149
150then
151
152Critical="CPU负载过高,请即使处理。 $CPULoad2 "
153
154status=0
155
156elif [ $CPULoad1 -gt 3 -a $CPULoad1 -lt 5 ]
157
158then
159
160Warning="CPU负载警告, $Warning "
161
162WarningT="CPU负载报警"
163
164status=1
165
166else
167
168echo "CPU OK"
169
170status=2
171
172fi
173
174}
175
176#监控服务状态
177
178ServerMonitor () {
179
180#服务状态监控
181
182timeout=10
183
184makfails=2
185
186fails=0
187
188success=0
189
190while true
191
192do
193
194/usr/bin/wget --timeout=$timeout --tries=1 http://192.168.20.84/ -q -O /dev/null
195
196if [ $? -ne 0 ]
197
198then
199
200let fails=fails+1
201
202success=0
203
204else
205
206fails=0
207
208let success=1
209
210fi
211
212if [ $success -ge 1 ]
213
214then
215exit 0
216fi
217if [ $fails -ge 1 ]
218
219then
220
221Critical="应用服务出现故障,请紧急处理!"
222
223echo $Critical | mutt -s "服务down" hao.lulu@chinaebi.com
224
225exit -1
226
227fi
228
229done
230
231}
232
233#发送报警短信、报警邮件
234
235for n in Usermonitor MemMonitor DiskMonitorG DiskMonitorA CPULoad ServerMonitor
236
237do
238
239$n
240
241if [ $status -eq 0 ]
242
243then
244
245curl "http://172.20.36.118/app/tms.do?tranCode=TM0311&;content=$Critical"
246
247elif [ $status -eq 1 ]
248
249then
250
251curl "http://172.20.36.118/app/tms.do?tranCode=TM0310&;title=$WarningT&content=Warning"
252
253else
254
255echo "ok"
256
257fi
258
259done
260
261

给TA打赏
共{{data.count}}人
人已打赏
安全技术安全运维

Windows服务器如何发现被黑

2018-5-20 12:24:31

安全技术

Bootstrap 间隔 (Spacing)

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索