由於需要對公司特定服務進行監控,於是,通過編寫腳本獲取各個進程占用系統資源的信息,從而使用zabbix采集到這些數據進行特定進程的基礎監控。

我這主要需要監控的程序如下:

nginx redis mysql tomcat sentinel mongodb openfire kafka zookeeper twemproxy mycat memcached php httpd

首先,在agent端編寫監控腳本,腳本內容如下:

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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
[root@monitor sbin]$  cat  /data/zabbix/sbin/processstatus .sh 
#!/bin/bash
#date:2015.06.15
nginxmem(){
ps  aux| grep  "nginx" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
nginxcpu(){
     ps  aux| grep  "nginx" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
nginxnum(){
     ps  aux| grep  "nginx" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
redismemmem(){
     ps  aux| grep  "redismem" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
redismemcpu(){
     ps  aux| grep  "redismem" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
redismemnum(){
     ps  aux| grep  "redismem" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
mysqlmem(){
     ps  aux| grep  "mysql" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
mysqlcpu(){
     ps  aux| grep  "mysql" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
mysqlnum(){
     ps  aux| grep  "mysql" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
 
tomcatmem(){
     ps  aux| grep  "tomcat" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
tomcatcpu(){
     ps  aux| grep  "tomcat" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
tomcatnum(){
     ps  aux| grep  "tomcat" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
sentinelmem(){
     ps  aux| grep  "sentinel" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
sentinelcpu(){
     ps  aux| grep  "sentinel" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
sentinenum(){
     ps  aux| grep  "sentinel" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
 
mongodbmem(){
     ps  aux| grep  "mongod" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
mongodbcpu(){
     ps  aux| grep  "mongod" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
mongodbnum(){
     ps  aux| grep  "mongod" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
 
openfiremem(){
     ps  aux| grep  "openfire" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
openfirecpu(){
     ps  aux| grep  "openfire" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
openfirenum(){
     ps  aux| grep  "openfire" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
kafkamem(){
     ps  aux| grep  "kafka" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
kafkacpu(){
     ps  aux| grep  "kafka" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
kafkanum(){
     ps  aux| grep  "kafka" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
zookeepermem(){
     ps  aux| grep  "zookeeper" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
zookeepercpu(){
     ps  aux| grep  "zookeeper" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
zookeepernum(){
     ps  aux| grep  "zookeeper" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
twemproxymem(){
     ps  aux| grep  "twemproxy" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
twemproxycpu(){
     ps  aux| grep  "twemproxy" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
twemproxynum(){
     ps  aux| grep  "twemproxy" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
mycatmem(){
     ps  aux| grep  "mycat" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
mycatcpu(){
     ps  aux| grep  "mycat" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
mycatnum(){
     ps  aux| grep  "mycat" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
httpdmem(){
     ps  aux| grep  "httpd" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
httpdcpu(){
     ps  aux| grep  "httpd" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
httpdnum(){
     ps  aux| grep  "httpd" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
memcachedmem(){
     ps  aux| grep  "memcached" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
memcachedcpu(){
     ps  aux| grep  "memcached" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
memcachednum(){
     ps  aux| grep  "memcached" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
 
 
phpmem(){
     ps  aux| grep  "php" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$6}; END{print sum}'
}
phpcpu(){
     ps  aux| grep  "php" | grep  - v  "grep" | grep  - v  "processstatus.sh" | awk  '{sum+=$3}; END{print sum}'
}
phpnum(){
     ps  aux| grep  "php" | grep  - v  "grep" | grep  - v  "processstatus.sh" wc  -l
}
 
case  "$1"  in
nginxmem)
nginxmem
;;
nginxcpu)
nginxcpu
;;
nginxnum)
nginxnum
;;
redismem)
redismem
;;
rediscpu)
rediscpu
;;
redisnum)
redisnum
;;
mysqlmem)
mysqlmem
;;
mysqlcpu)
mysqlcpu
;;
mysqlnum)
mysqlnum
;;
tomcatmem)
tomcatmem
;;
tomcatcpu)
tomcatcpu
;;
tomcatnum)
tomcatnum
;;
sentinelmem)
sentinelmem
;;
sentinelcpu)
sentinelcpu
;;
sentinelnum)
sentinelnum
;;
mongodbmem)
mongodbmem
;;
mongodbcpu)
mongodbcpu
;;
mongodbnum)
mongodbnum
;;
openfiremem)
openfiremem
;;
openfirecpu)
openfirecpu
;;
openfirenum)
openfirenum
;;
kafkamem)
kafkamem
;;
kafkacpu)
kafkacpu
;;
kafkanum)
kafkanum
;;
zookeepermem)
zookeepermem
;;
zookeepercpu)
zookeepercpu
;;
zookeepernum)
zookeepernum
;;
twemproxymem)
twemproxymem
;;
twemproxycpu)
twemproxycpu
;;
twemproxynum)
twemproxynum
;;
mycatmem)
mycatmem
;;
mycatcpu)
mycatcpu
;;
mycatnum)
mycatnum
;;
httpdmem)
httpdmem
;;
httpdcpu)
httpdcpu
;;
httpdnum)
httpdnum
;;
memcachedmem)
memcachedmem
;;
memcachedcpu)
memcachedcpu
;;
memcachednum)
memcachednum
;;
phpmem)
phpmem
;;
phpcpu)
phpcpu
;;
phpnum)
phpnum
;;
*)
echo  "Usage: $0 {nginxmem|nginxcpu|nginxnum|redismem|rediscpu|redisnum|mysqlmem|mysqlcpu|mysqlnum|mongodbnum|tomcatmem|tomcatcpu|tomcatnum|sentinelmem|sentinelcpu|sentinelnum|mongodbmem|mongodbcpu|mongodbnum|openfiremem|openfirecpu|openfirenum|kafkamem|kafkacpu|kafkanum|zookeepermem|zookeepercpu|zookeepernum|twemproxymem|twemproxycpu|twemproxynum|mycatmem|mycatcpu|mycatnum|httpdmem|httpdcpu|httpdnum|memcachedmem|memcachedcpu|memcachednum|phpmem|phpcpu|phpnum}"
esac

 

然后修改腳本的權限,使用:

chmod +x processstatus.sh

在zabbix_agentd.con.d/下面的配置文件中增加如下代碼:

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
[9kgame@monitor zabbix_agentd.conf.d]$  cat  /data/zabbix/etc/zabbix_agentd .conf.d /process_num_cpu_mem .conf 
#monitor process
UserParameter=process.nginx.memory, /data/zabbix/sbin/processstatus .sh nginxmem
UserParameter=process.nginx.cpu, /data/zabbix/sbin/processstatus .sh nginxcpu
UserParameter=process.nginx.number, /data/zabbix/sbin/processstatus .sh nginxnum
UserParameter=process.redis.memory, /data/zabbix/sbin/processstatus .sh redismem
UserParameter=process.redis.cpu, /data/zabbix/sbin/processstatus .sh rediscpu
UserParameter=process.redis.number, /data/zabbix/sbin/processstatus .sh redisnum
UserParameter=process.mysql.memory, /data/zabbix/sbin/processstatus .sh mysqlmem
UserParameter=process.mysql.cpu, /data/zabbix/sbin/processstatus .sh mysqlcpu
UserParameter=process.mysql.number, /data/zabbix/sbin/processstatus .sh mysqlnum
UserParameter=process.tomcat.memory, /data/zabbix/sbin/processstatus .sh tomcatmem
UserParameter=process.tomcat.cpu, /data/zabbix/sbin/processstatus .sh tomcatcpu
UserParameter=process.tomcat.number, /data/zabbix/sbin/processstatus .sh tomcatnum
UserParameter=process.sentinel.memory, /data/zabbix/sbin/processstatus .sh sentinelmem
UserParameter=process.sentinel.cpu, /data/zabbix/sbin/processstatus .sh sentinelcpu
UserParameter=process.sentinel.number, /data/zabbix/sbin/processstatus .sh sentinelnum
UserParameter=process.mongodb.memory, /data/zabbix/sbin/processstatus .sh mongodbmem
UserParameter=process.mongodb.cpu, /data/zabbix/sbin/processstatus .sh mongodbcpu
UserParameter=process.mongodb.number, /data/zabbix/sbin/processstatus .sh mongodbnum
UserParameter=process.openfire.memory, /data/zabbix/sbin/processstatus .sh openfiremem
UserParameter=process.openfire.cpu, /data/zabbix/sbin/processstatus .sh openfirecpu
UserParameter=process.openfire.number, /data/zabbix/sbin/processstatus .sh openfirenum
UserParameter=process.kafka.memory, /data/zabbix/sbin/processstatus .sh kafkamem
UserParameter=process.kafka.cpu, /data/zabbix/sbin/processstatus .sh kafkacpu
UserParameter=process.kafka.number, /data/zabbix/sbin/processstatus .sh kafkanum
UserParameter=process.zookeeper.memory, /data/zabbix/sbin/processstatus .sh zookeepermem
UserParameter=process.zookeeper.cpu, /data/zabbix/sbin/processstatus .sh zookeepercpu
UserParameter=process.zookeeper.number, /data/zabbix/sbin/processstatus .sh zookeepernum
UserParameter=process.twemproxy.memory, /data/zabbix/sbin/processstatus .sh twemproxymem
UserParameter=process.twemproxy.cpu, /data/zabbix/sbin/processstatus .sh twemproxycpu
UserParameter=process.twemproxy.number, /data/zabbix/sbin/processstatus .sh twemproxynum
UserParameter=process.mycat.memory, /data/zabbix/sbin/processstatus .sh mycatmem
UserParameter=process.mycat.cpu, /data/zabbix/sbin/processstatus .sh mycatcpu
UserParameter=process.mycat.number, /data/zabbix/sbin/processstatus .sh mycatnum
UserParameter=process.httpd.memory, /data/zabbix/sbin/processstatus .sh httpdmem
UserParameter=process.httpd.cpu, /data/zabbix/sbin/processstatus .sh httpdcpu
UserParameter=process.httpd.number, /data/zabbix/sbin/processstatus .sh httpdnum
UserParameter=process.memcached.memory, /data/zabbix/sbin/processstatus .sh memcachedmem
UserParameter=process.memcached.cpu, /data/zabbix/sbin/processstatus .sh memcachedcpu
UserParameter=process.memcached.number, /data/zabbix/sbin/processstatus .sh memcachednum
UserParameter=process.php.memory, /data/zabbix/sbin/processstatus .sh phpmem
UserParameter=process.php.cpu, /data/zabbix/sbin/processstatus .sh phpcpu
UserParameter=process.php.number, /data/zabbix/sbin/processstatus .sh phpnum

 

最后重啟zabbix_agentd服務

service zabbix_agentd restart

然后在zabbix服務端使用zabbix_get看能否取到相應的數據,像下面這樣就是成功獲取到了數據。

 

[root@localhost zabbix] # bin/zabbix_get -s 172.16.1.20 -p 10050 -k process.nginx.memory
184876

 

最后,需要在zabbix中定義模板。模板附件鏈接在下面。

zabbix模板下載

如果模板無法下載可以在附件中下載模板

需要注明的是內存取到的值得單位是KB,所以定義item的時候使用自定義倍數乘以1000,單位改成Byte,另外CPU占用率的值是帶有小數點的一個數,所以在定義item的時候需要定義值得類型是浮點型,並且該值是占用邏輯單核的CPU占用率,所以需要定義自定義倍數,我實驗中的服務器是2顆CPU,每顆CPU是8核16線程,所以自定義倍數是原來的基礎上除以32,單位改成%就好。

wKiom1V-bluw3jXfAAGuQ1sx50A716.jpg

wKiom1V-bx_zMpagAAGZw-GzZBU009.jpg

wKiom1V-bs_QsEOBAAGS67C2qDc024.jpg

 

下面是做好之后的顯示效果:

wKiom1V-baWxFO4LAAIC1oDItsQ527.jpg

注意這里MySQL占用cpu為0.0031%,表示占用1個核心的0.0031%,因為有32核心,所以mysql占總的cpu應該為

0.0031%*32=0.0992%

wKioL1V-b12zrX0UAAI-AE6sUBo325.jpg

http://xianglinhu.blog.51cto.com/5787032/1657570