在运维工作中,经常会给一批服务器添加zabbix监控,添加监控的第一步就是为这些服务器安装zabbix agent。现在将批量安装zabbix agent的方法总结,用以分享给同样奋战在运维一线的道友们。
思路
1,编写服务器列表文件(agent_hosts.txt)
该文件分为三列,主机ip、主机密码、zabbix server或zabbix proxy的ip。
2,编写自动部署zabbix agent的脚本(install-zabbix-agent.sh)
用于实现单台服务器的自动部署。
3,编写批量安装脚本(auto_install.sh和install_agent.exp)
将自动部署zabbix agent脚本上传至每台被监控的服务器中,并将服务器信息作为参数,执行被监控服务器上的自动部署脚本,以实现批量安装的目的。
目录结构
[root@ys opt]# pwd
/opt
[root@ys opt]# tree -L 3 auto_install/
auto_install/
├── agent_hosts.txt
├── auto_install.sh
├── install_agent
│ ├── install-zabbix-agent.sh
│ ├── zabbix-2.4.5-1.el6.x86_64.rpm
│ └── zabbix-agent-2.4.5-1.el6.x86_64.rpm
└── install_agent.exp
1 directory, 6 files
实例
1,编写服务器列表文件
[root@ys auto_install]# pwd
/opt/auto_install
[root@ys auto_install]# cat agent_hosts.txt
192.168.1.101 1qaz3edc 192.168.1.45
192.168.1.102 1qaz3edc 192.168.1.45
2,编写自动部署zabbix agent的脚本(install-zabbix-agent.sh)
[root@ys install_agent]# pwd
/opt/auto_install/install_agent
[root@ys install_agent]# cat install-zabbix-agent.sh
#!/bin/bash
COMMAND_LINE="$0 $*"
export SCRIPT_NAME="$0"
usage() {
echo "Usage: $SCRIPT_NAME <hostip> <serverip>"
}
if [ $# -ne 2 ]
then
usage ;
exit ;
fi
if [ -x /usr/sbin/zabbix_agentd ]; then
exit 5
fi
service zabbix-agent stop
rpm -ivh zabbix-2.4.5-1.el6.x86_64.rpm
rpm -ivh zabbix-agent-2.4.5-1.el6.x86_64.rpm
rm -f /etc/zabbix/zabbix_agentd.conf
rm -f /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
echo "PidFile=/var/log/zabbix/zabbix_agentd.pid" > /etc/zabbix/zabbix_agentd.conf
echo "LogFile=/var/log/zabbix/zabbix_agentd.log" >> /etc/zabbix/zabbix_agentd.conf
echo "LogFileSize=10" >> /etc/zabbix/zabbix_agentd.conf
echo "EnableRemoteCommands=1" >> /etc/zabbix/zabbix_agentd.conf
echo "LogRemoteCommands=1" >> /etc/zabbix/zabbix_agentd.conf
echo "Server=$2" >> /etc/zabbix/zabbix_agentd.conf
echo "ServerActive=$2" >> /etc/zabbix/zabbix_agentd.conf
echo "SourceIP=$1" >> /etc/zabbix/zabbix_agentd.conf
echo "Hostname=$1" >> /etc/zabbix/zabbix_agentd.conf
echo "Include=/etc/zabbix/zabbix_agentd.d/*.conf" >> /etc/zabbix/zabbix_agentd.conf
chmod 640 /etc/sudoers
sed -i 's/Defaults *requiretty/#Defaults requiretty/g' /etc/sudoers
sed -i 's/zabbix ALL=(ALL) NOPASSWD: ALL//g' /etc/sudoers
echo "zabbix ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod 440 /etc/sudoers
echo "#Get partition number" > /etc/zabbix/zabbix_agentd.d/userparameter.conf
echo "UserParameter=vfs.fs.partitionnum,sudo fdisk -l 2>&1 | grep '^Disk /dev/' | wc -l" >> /etc/zabbix/zabbix_agentd.d/userparameter.conf
echo "#Get size of a directory,Defaults to /tmp" >> /etc/zabbix/zabbix_agentd.d/userparameter.conf
echo "UserParameter=vfs.dir.size[*],dir=\"$1\"; du -s -B 1 \"${dir:-/tmp}\" | cut -f1" >> /etc/zabbix/zabbix_agentd.d/userparameter.conf
echo "#Total CPU utilisation by all processes with a given name." >> /etc/zabbix/zabbix_agentd.d/userparameter.conf
echo "#Returns empty value if no such processes are present, numeric items will turn unsupported." >> /etc/zabbix/zabbix_agentd.d/userparameter.conf
echo "#Defaults to zabbix_agentd." >> /etc/zabbix/zabbix_agentd.d/userparameter.conf
echo "UserParameter=proc.cpu[*],proc=\"$1\"; ps -o pcpu= -C \"${proc:-zabbix_agentd}\" | awk '{sum += $$1} END {print sum}'" >> /etc/zabbix/zabbix_agentd.d/userparameter.conf
chkconfig --level 2345 zabbix-agent on
service zabbix-agent start
3,编写批量安装脚本(auto_install.sh和install_agent.exp)
[root@ys auto_install]# pwd
/opt/auto_install
[root@ys auto_install]# cat auto_install.sh
#!/bin/bash
work_dir=`pwd`
for i in `awk '{print $1}' ${work_dir}/agent_hosts.txt`
do
j=`awk -v I=${i} '{if(I==$1) print $2}' ${work_dir}/agent_hosts.txt`
k=`awk -v I=${i} '{if(I==$1) print $3}' ${work_dir}/agent_hosts.txt`
expect ${work_dir}/install_agent.exp $i $j $k
done
[root@ys auto_install]# pwd
/opt/auto_install
[root@ys auto_install]# cat install_agent.exp
#!/usr/bin/expect
set host_ip [lindex $argv 0]
set host_pass [lindex $argv 1]
set serv_ip [lindex $argv 2]
spawn scp -r /opt/auto_install/install_agent root@$host_ip:/opt
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "$host_pass\r"}
}
spawn ssh root@$host_ip
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "$host_pass\r"}
}
expect "*#"
send "cd /opt/install_agent\r"
expect "*#"
send "./install-zabbix-agent.sh $host_ip $serv_ip\r"
expect "]#"
send "exit\r"
expect eof
4,授权并执行
[root@ys auto_install]# pwd
/opt/auto_install
[root@ys auto_install]# chmod 775 auto_install.sh
[root@ys auto_install]# chmod 775 install_agent.exp
[root@ys auto_install]# chmod 775 install_agent/install-zabbix-agent.sh
[root@ys auto_install]# ./auto_install.sh