优先参考 zabbix自动发现与监控内存和CPU使用率最高的进程
http://7424593.blog.51cto.com/7414593/1908930
-
监控网站url code
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
|
#!/bin/bash
# function:monitor tcp connect status from zabbix
# License: GPL
# mail:itnihao@qq.com
# version:1.0 date:2012-12-09
source
/
etc
/
bashrc >
/
dev
/
null
2
>&
1
source
/
etc
/
profile >
/
dev
/
null
2
>&
1
#/usr/bin/curl -o /dev/null -s -w %{http_code} http://$1/
WEB_SITE_discovery () {
WEB_SITE
=
($(cat
/
usr
/
local
/
zabbix
/
scripts
/
WEB.txt|grep
-
v
"^#"
))
printf
'{\n'
printf
'\t"data":[\n'
for
((i
=
0
;i<${
#WEB_SITE[@]};++i))
{
num
=
$(echo $((${
#WEB_SITE[@]}-1)))
if
[
"$i"
!
=
${num} ];
then
printf
"\t\t{ \n"
printf
"\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$i]}\"},\n"
else
printf
"\t\t{ \n"
printf
"\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$num]}\"}]}\n"
fi
}
}
web_site_code () {
/
usr
/
bin
/
curl
-
o
/
dev
/
null
-
s
-
w
%
{http_code} http:
/
/
$
1
}
case
"$1"
in
web_site_discovery)
WEB_SITE_discovery
;;
web_site_code)
web_site_code $
2
;;
*
)
echo
"Usage:$0 {web_site_discovery|web_site_code [URL]}"
;;
esac
|
2.nginx统一监控脚本 Active
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
|
#!/bin/bash
#
# Filename: nginx_monitor.sh
# Revision: 1.0
# Date: 2014/09/24
# Author: Qicheng
# Email:
# Website: http://qicheng0211.blog.51cto.com
# Description: nginx统一监控脚本
# Notes:
#
# 修改AGENT_CONF的值为本地zabbix agent的配置文件路径
AGENT_CONF
=
"/usr/local/zabbix/etc/zabbix_agentd.conf"
# nginx站点的配置文件路径
NGINX_SITE_CONF
=
"/usr/local/zabbix/scripts/nginx_site.conf"
# zabbix_sender的路径
ZBX_SENDER
=
"/usr/local/bin/zabbix_sender"
FUNCTION
=
$
1
HOST_NAME
=
$
2
NGINX_SITE
=
$
3
CURL
=
"/usr/bin/curl"
TIMEOUT
=
30
# nginx site low-level discovery
function nginxSiteDiscovery()
{
nginx_site
=
($(grep
'^[^#]'
${NGINX_SITE_CONF}))
max_index
=
$[${
#nginx_site[@]}-1]
printf
'{\n'
printf
'\t"data":['
for
key
in
`seq
-
s
' '
0
$max_index`
do
printf
'\n\t\t{'
printf
"\"{#NGINX_SITE}\":\"${nginx_site[${key}]}\"}"
if
[ $key
-
ne $max_index ];then
printf
","
fi
done
printf
'\n\t]\n'
printf
'}\n'
}
# 获取nginx status,把数据发送到zabbix server
function getNginxStatus()
{
nginx_status_url
=
"${NGINX_SITE}/nginx_status"
# 获取nginx_status后,保存到下面的文件里
nginx_status_file
=
"/tmp/nginx_status_$(echo ${NGINX_SITE} | sed 's#^http.*://##; s#/#_#g').log"
:>
"$nginx_status_file"
# curl获取nginx_status
${CURL}
-
s
-
-
connect
-
timeout ${TIMEOUT}
"$nginx_status_url"
2
>&
1
| tee
"$nginx_status_file"
line_num
=
$(cat
"$nginx_status_file"
| wc
-
l)
# 判断是否正确获取nginx_status
[ $line_num
-
ne
4
] && { echo
"ERROR: $nginx_status_file is not correct."
; exit
1
;}
active
=
$(cat
"$nginx_status_file"
| grep
'Active'
| awk
'{print $NF}'
)
reading
=
$(cat
"$nginx_status_file"
| grep
'Reading'
| awk
'{print $2}'
)
writing
=
$(cat
"$nginx_status_file"
| grep
'Writing'
| awk
'{print $4}'
)
waiting
=
$(cat
"$nginx_status_file"
| grep
'Waiting'
| awk
'{print $6}'
)
accepts
=
$(cat
"$nginx_status_file"
| awk NR
=
=
3
| awk
'{print $1}'
)
handled
=
$(cat
"$nginx_status_file"
| awk NR
=
=
3
| awk
'{print $2}'
)
requests
=
$(cat
"$nginx_status_file"
| awk NR
=
=
3
| awk
'{print $3}'
)
echo
"Sending the data to zabbix server..."
# 将特定格式的数据发送到zabbix server,每行的格式为:<hostname> <key> <value>
cat << EOF | ${ZBX_SENDER}
-
c ${AGENT_CONF}
-
i
-
"${HOST_NAME}"
"nginx_status[$NGINX_SITE,active]"
"${active}"
"${HOST_NAME}"
"nginx_status[$NGINX_SITE,reading]"
"${reading}"
"${HOST_NAME}"
"nginx_status[$NGINX_SITE,writing]"
"${writing}"
"${HOST_NAME}"
"nginx_status[$NGINX_SITE,waiting]"
"${waiting}"
"${HOST_NAME}"
"nginx_status[$NGINX_SITE,accepts]"
"${accepts}"
"${HOST_NAME}"
"nginx_status[$NGINX_SITE,handled]"
"${handled}"
"${HOST_NAME}"
"nginx_status[$NGINX_SITE,requests]"
"${requests}"
EOF
}
[ $
# -eq 0 ] && { echo "ERROR: The script needs at least one parameter."; exit 1;}
case $FUNCTION
in
nginxSiteDiscovery|getNginxStatus)
$FUNCTION
;;
*
)
echo
"ERROR: Bad parameters."
exit
1
;;
esac
|
3.分区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/bin/bash
#Fucation:zabbix low-level discovery
partition() {
port
=
($(grep
-
E
"(vd[a-z]$|sd[a-z]$)"
/
proc
/
partitions|awk
'{print $4}'
))
printf
'{\n'
printf
'\t"data":[\n'
for
key
in
${!port[@]}
do
if
[[
"${#port[@]}"
-
gt
1
&&
"${key}"
-
ne
"$((${#port[@]}-1))"
]];then
printf
'\t {\n'
printf
"\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"},\n"
else
[[
"${key}"
-
eq
"((${#port[@]}-1))"
]]
printf
'\t {\n'
printf
"\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"}\n"
fi
done
printf
'\t ]\n'
printf
'}\n'
}
$
1
|
sh /usr/local/zabbix/bin/partition_low_discovery.sh partition
4.io
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
|
[root@xx zabbix_agentd.conf.d]
# cat vfsiojohn.conf
UserParameter
=
vfsiojohn.discovery,
/
usr
/
bin
/
python
/
usr
/
local
/
zabbix
/
bin
/
disk_discovery.py
UserParameter
=
disk.status[
*
],
/
usr
/
local
/
zabbix
/
bin
/
disk_status.sh $
1
$
2
[root@xx zabbix_agentd.conf.d]
# /usr/bin/python /usr/local/zabbix/bin/disk_discovery.py
{
"data"
:[
{
"{#DISK_NAME}"
:
"sda"
}
]
}
[root@xx zabbix_agentd.conf.d]
# cat /usr/local/zabbix/bin/disk_status.sh
#/bin/sh
device
=
$
1
item
=
$
2
case $item
in
rrqm)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $2}'
;;
wrqm)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $3}'
;;
rps)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $4}'
;;
wps)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $5}'
;;
rKBps)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $6}'
;;
wKBps)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $7}'
;;
avgrq
-
sz)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $8}'
;;
avgqu
-
sz)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $9}'
;;
await)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $10}'
;;
svctm)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $11}'
;;
util)
/
usr
/
bin
/
tail
-
n20
/
tmp
/
iostat_output |grep
"\b$device\b"
|tail
-
1
|awk
'{print $12}'
;;
esac
|
5.zabbix 监控内存和cpu占用最多的进程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# cat discovery_process.sh
#!/bin/bash
#system process discovery script
top
-
b
-
n
1
>
/
tmp
/
.top.txt && chown zabbix.
/
tmp
/
.top.txt
proc_array
=
(`tail
-
n
+
8
/
tmp
/
.top.txt | awk
'{a[$NF]+=$10}END{for(k in a)print a[k],k}'
|sort
-
gr|head
-
10
|cut
-
d
" "
-
f2`)
length
=
${
#proc_array[@]}
printf
"{\n"
printf
'\t'
"\"data\":["
for
((i
=
0
;i<$length;i
+
+
))
do
printf
"\n\t\t{"
printf
"\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"
if
[ $i
-
lt $[$length
-
1
] ];then
printf
","
fi
done
printf
"\n\t]\n"
printf
"}\n"
|
or
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# cat discovery_process2.sh
#!/bin/bash
#system process discovery script
top
-
b
-
n
1
>
/
tmp
/
.top.txt && chown zabbix.
/
tmp
/
.top.txt
proc_array
=
`tail
-
n
+
8
/
tmp
/
.top.txt | awk
'{a[$NF]+=$10}END{for(k in a)print a[k],k}'
|sort
-
gr|head
-
10
|cut
-
d
" "
-
f2`
length
=
`echo
"${proc_array}"
| wc
-
l`
count
=
0
echo
'{'
echo
-
e
'\t"data":['
echo
"$proc_array"
|
while
read line
do
echo
-
en
'\t\t{"{#PROCESS_NAME}":"'
$line
'"}'
count
=
$(( $count
+
1
))
if
[ $count
-
lt $length ];then
echo
','
fi
done
echo
-
e
'\n\t]'
echo
'}'
|
6.zabbix 监控io占用最多的进程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
cat pidtest.sh
#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
pidtest() {
port
=
($(cat
/
tmp
/
pidsta|awk
'{print $2}'
))
printf
'{\n'
printf
'\t"data":[\n'
for
key
in
${!port[@]}
do
if
[[
"${#port[@]}"
-
gt
1
&&
"${key}"
-
ne
"$((${#port[@]}-1))"
]];then
printf
'\t {\n'
printf
"\t\t\t\"{#PIDSTA}\":\"${port[${key}]}\"},\n"
else
[[
"${key}"
-
eq
"((${#port[@]}-1))"
]]
printf
'\t {\n'
printf
"\t\t\t\"{#PIDSTA}\":\"${port[${key}]}\"}\n"
fi
done
printf
'\t ]\n'
printf
'}\n'
}
$
1
|
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1969139,如需转载请自行联系原作者zabbix