#!/bin/bash
LANG=C
###check adapter name
zabbix_user=
'zabbix'
zabbix_install_dir=
'/usr/local/zabbix'
zabbix_agent_hostname=$(hostname)
zabbix_server_port=
'10051'
zabbix_agent_ip=$(/sbin/ifconfig|grep
'inet addr:'
|grep -Ev
'127.0.0.1'
| cut -d: -f2 | awk
'{if ($1~/^10.*/) {print $1} else {print $1}}'
|head -n
1
)
zabbix_agent_header=$(/sbin/ifconfig|grep
'inet addr:'
|grep -Ev
'127.0.0.1'
| cut -d: -f2 | awk
'{if ($1~/^10.*/) {print $1} else {print $1}}'
|head -n
1
|cut -d . -f1)
glibc_version=$(/usr/bin/ldd --version|awk
'NR==1{print $NF}'
|cut -d . -f2)
function
server_agent {
#check zabbix server ip
if
[[ $zabbix_agent_header -eq
10
]] && [[ $(ping -c
2
10.10
.
10.8
>>/dev/
null
2
>&
1
;echo $?) -eq
0
]];then
zabbix_server_ip=
'10.10.10.8'
else
zabbix_server_ip=
'111.111.111.149'
fi
}
function
proxy_agent {
#check zabbix server ip
if
[[ $zabbix_agent_header -eq
10
]] && [[ $(ping -c
2
10.10
.
10.15
>>/dev/
null
2
>&
1
;echo $?) -eq
0
]];then
zabbix_server_ip=
'10.10.10.15'
else
zabbix_server_ip=
'222.222.222.82'
fi
}
function
base {
# Check
if
user
is
root
if
[ $(id -u) !=
"0"
]; then
echo -e
"\033[1;31m Error: You must be root to run this script!\033[0m"
exit
1
fi
#check network
ping -c
2
www.baidu.com >>/dev/
null
2
>&
1
if
[ $? -ne
0
];then
echo -e
"\033[1;31m Error: The host can't connect to Inetnet!\033[0m"
exit
1
fi
#check wget software
which wget >>/dev/
null
2
>&
1
if
[ $? -ne
0
];then
echo -e
"\033[1;31m Error: The wget isn't install,now i will auto install one!\033[0m"
if
[ $(grep -i -c
"ubuntu"
/etc/issue) =
0
];then
yum install wget -y
else
apt-
get
install wget -y
fi
fi
which wget >>/dev/
null
2
>&
1
if
[ $? -ne
0
];then
echo -e
"\033[1;31m Error: The wget install fail,please manual install wget!\033[0m"
exit
1
fi
#create user
for
zabbix
if
[ $(grep -i -c
"ubuntu"
/etc/issue) =
1
];then
/usr/sbin/useradd $zabbix_user -M -s /usr/sbin/nologin
else
/usr/sbin/useradd $zabbix_user -M -s /sbin/nologin
fi
#create directory
for
install zabbix
/bin/mkdir $zabbix_install_dir
local_dir=$(pwd)
#check system version
system_version=$(uname -m)
#check glibc version
if
[ $glibc_version -gt
5
];then
if
[ $system_version ==
'x86_64'
];then
#download zabbix agent by system version x86_64
wget http:
#unpack zabbix agent to /usr/loca/zabbix
tar zxf zabbix_agents_2.
0.6
.linux2_6_23.amd64.tar.gz -C $zabbix_install_dir
else
#download zabbix agent by system version i686
wget http:
#unpack zabbix agent to /usr/loca/zabbix
tar zxf zabbix_agents_2.
0.6
.linux2_6_23.i386.tar.gz -C $zabbix_install_dir
fi
else
if
[ $system_version ==
'x86_64'
];then
#download zabbix agent
wget http:
wget http:
#unpack zabbix agent to /usr/loca/zabbix
tar zxf zabbix_agents_2.
0.6
.linux2_6_23.amd64.tar.gz -C /tmp/
tar zxf zabbix_agents_2.
0.3
.linux2_6.amd64.tar.gz -C $zabbix_install_dir
else
#download zabbix agent by system version x86_64
wget http:
wget http:
#unpack zabbix agent to /usr/loca/zabbix
tar zxf zabbix_agents_2.
0.6
.linux2_6_23.i386.tar.gz -C /tmp/
tar zxf zabbix_agents_2.
0.3
.linux2_6.i386.tar.gz -C $zabbix_install_dir
fi
mv /tmp/conf $zabbix_install_dir
fi
#mondiy zabbix agent conf
cd $zabbix_install_dir/conf
sed -i
's#Hostname=Zabbix server#Hostname='
$zabbix_agent_hostname
'#'
zabbix_agentd.conf
sed -i
's@# SourceIP=@SourceIP='
$zabbix_agent_ip
'@'
zabbix_agentd.conf
sed -i
's#Server=.*#Server='
$zabbix_server_ip
'#'
zabbix_agentd.conf
sed -i
's#ServerActive=.*#ServerActive='
$zabbix_server_ip
':'
$zabbix_server_port
'#'
zabbix_agentd.conf
#Disable requiretty
sed -i
's/^Defaults.*.requiretty/#Defaults requiretty/'
/etc/sudoers
#add check_lvm.sh content
cat >>$zabbix_install_dir/bin/check_lvm.sh <<EOF
#!/bin/bash
SIZE_1=
102400
SIZE_2=
1024
# Total lvm available
total=\`/sbin/pvdisplay|grep
'PV Size'
|gawk
'{print \$3}'
|head -n
1
\`
# Total lvm used
used=\`/sbin/vgdisplay|grep
'Alloc PE / Size'
|gawk
'{print \$7}'
|head -n
1
\`
# Calc total minus used
free=\`/sbin/vgdisplay|grep
'Free PE / Size'
|gawk
'{print \$7}'
|head -n
1
\`
free_2=\`/sbin/vgdisplay|grep
'Free PE / Size'
|gawk
'{print \$7,\$8}'
|head -n
1
\`
free_3=\$(echo
"\$free*\$SIZE_2*\$SIZE_2"
|bc)
FREESIZE_1=\$(echo
"\$free*\$SIZE_1"
|bc)
FREESIZE_2=\$(echo
"\$total*\$SIZE_2"
|bc)
percent=\$(echo
"\$FREESIZE_1 / \$FREESIZE_2"
|bc)
case
\$
1
in
lvm_total)
echo \$total
;;
lvm_used)
echo \$used
;;
lvm_free)
echo \$free_3
;;
lvm_percent)
echo \$percent
;;
*)
echo
"Usage:\`basename \$0\` {lvm_total|lvm_used|lvm_free|lvm_percent}"
;;
esac
EOF
#add UserParameter
cat >>$zabbix_install_dir/conf/zabbix_agentd.conf<<EOF
UserParameter=memcached_stats[*],(echo stats; sleep
0.1
) | telnet
127.0
.
0.1
\$
1
2
>&
1
| awk
'/STAT \$2 / {print \$NF}'
UserParameter=mysql[*],mysql -h
127.0
.
0.1
-P
3306
-uzabbix -pzabbix -e
"show global status"
|grep
"\<\$1\>"
|cut -f2
UserParameter=redis_stats[*],redis-cli -h $zabbix_agent_ip -p \$
1
info|grep \$
2
|cut -d : -f2
UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$4}'
UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$7}'
UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$8}'
UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$11}'
UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$12}'
UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$13}'
UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$6}'
UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep \$
1
| head -
1
| awk
'{print \$\$10}'
UserParameter=MongoDB.Status[*],/bin/echo
"db.serverStatus().\$1"
| /usr/bin/mongo admin | grep
"\$2"
|awk -F:
'{print \$\$2}'
|awk -F,
'{print \$\$1}'
UserParameter=check_service_number[*],ps aux|grep
"\$1"
|grep -v grep|wc -l
UserParameter=check_lvm[*],/usr/bin/sudo $zabbix_install_dir/bin/check_lvm.sh \$
1
EOF
#check check_lvm.sh
in
the /etc/sudoer
cmd=$(grep check_lvm /etc/sudoers|wc -l)
if
[ $cmd -eq
0
];then
echo
"zabbix ALL=NOPASSWD:$zabbix_install_dir/bin/check_lvm.sh"
>>/etc/sudoers
fi
#grant
755
to check_lvm.sh
chmod
755
$zabbix_install_dir/bin/check_lvm.sh
#mondiy zabbix install dir user
chown -R $zabbix_user:$zabbix_user $zabbix_install_dir
#start zabbix agent server
$zabbix_install_dir/sbin/zabbix_agentd -c $zabbix_install_dir/conf/zabbix_agentd.conf
#insert boot start to start zabbix agent server
check_rc=$(grep -c
"$zabbix_install_dir/sbin/zabbix_agentd -c $zabbix_install_dir/conf/zabbix_agentd.conf"
/etc/rc.local)
if
[ $check_rc -eq
0
];then
echo
"$zabbix_install_dir/sbin/zabbix_agentd -c $zabbix_install_dir/conf/zabbix_agentd.conf"
>>/etc/rc.local
fi
#
delete
rubbish
rm -rf $local_dir/zabbix_agents_2.
0.3
.linux2_6.amd64.tar.gz
rm -rf $local_dir/zabbix_agents_2.
0.6
.linux2_6_23.amd64.tar.gz
rm -rf /tmp/bin
rm -rf /tmp/sbin
rm -rf $local_dir/$(basename $
0
)
#check zabbix agent status
if
[ $(ps -ef|grep zabbix_agentd|grep -v grep|wc -l) -gt
0
];then
echo -e
"\033[1;32mZabbix agent is start!\033[0m"
exit
0
else
echo -e
"\033[1;31mZabbix agent is stop!please check!\033[0m"
exit
1
fi
}
case
$
1
in
install_server_agent)
server_agent
base
;;
install_proxy_agent)
proxy_agent
base
;;
*)
echo
"Usage:`basename $0` {install_server_agent|install_proxy_agent}"
;;
esac