Zabbix学习(1)-监控服务与Zabbix介绍
Zabbix学习(2)-Zabbix安装和基础使用
Zabbix学习(3)-Zabbix监控入门
Zabbix学习(4)-Proxy主动被动部署
Zabbix学习案例(1)-TCP状态监控
Zabbix学习案例(2)-memcached状态监控
Zabbix学习案例(3)-redis状态监控
Zabbix学习案例(4)-nginx状态监控
Zabbix学习案例(5)-SNMP监控和WEB监控
Zabbix学习案例(6)-MySQL监控
Zabbix学习案例(7)-grafana图形展示
Zabbix学习案例(8)-Zabbix故障自治愈
Zabbix学习案例(9)-Zabbix事件通知
zabbix 自动化部署
zabbix 自动化部署主要指自动化的部署 zabbix agent 主机,由于 zabbix server主机或者 zabbix proxy 主机的数量往往比较少,而生产实践中要监控的主机往往很多,如果一台一台的安装 zabbix agent 则不现实,这时可以考虑使用脚本通过ssh 批量部署,或者使用 ansible 批量部署安装 zabbix agent。
编写脚本使用源码编译安装 zabbix agent
实验环境:这里用web的2台服务器 WEB-1 :172.20.32.106和WEB-1 :172.20.32.107
zabbix server :172.20.32.101
基础命令:
# apt-get -y install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute gcc openssh-server iotop unzip zip make
编写脚本
root@WEB-1:/usr/local/src# vim compile_install_zabbix.sh
#!/bin/bash
#
WORK_DIR="/usr/local/src"
ZABBIX_VER="zabbix-4.0.20"
if [[ ! -e "${WORK_DIR}" ]]; then
WORK_DIR=`pwd`
fi
## install some libs and deps.
if grep -iq "ubuntu" /etc/issue; then
apt update
apt -y install iproute2 ntpdate tcpdump telnet \
traceroute nfs-kernel-server nfs-common lrzsz tree \
openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev \
ntpdate tcpdump telnet traceroute gcc openssh-server \
iotop unzip zip make
else
yum install -y vim iotop bc gcc gcc-c++ glibc glibc-devel \
pcre pcre-devel openssl openssl-devel zip unzip zlib-devel\
net-tools lrzsz tree ntpdate telnet lsof tcpdump wget libevent \
libevent-devel bc systemd-devel bash-completion traceroute
fi
## compile zabbix and install
cd ${WORK_DIR}
tar -xf ${ZABBIX_VER}.tar.gz && \
cd ${ZABBIX_VER} && \
./configure --prefix=/apps/zabbix_agent --enable-agent && \
make && make install
## add user and create dir for pid file and log file
useradd zabbix
mkdir /apps/zabbix_agent/pid
mkdir /apps/zabbix_agent/logs
# copy conf file to the app folder
\cp ${WORK_DIR}/zabbix-agent.service /lib/systemd/system/zabbix-agent.service
\cp ${WORK_DIR}/zabbix_agentd.conf /apps/zabbix_agent/etc/zabbix_agentd.conf
\cp ${WORK_DIR}/zabbix_agentd.conf.d/* /apps/zabbix_agent/etc/zabbix_agentd.conf.d/
## modify the zabbix hostname to ip.
HOST_IP=`ifconfig eth0 | grep -w inet | awk '{print $2}'`
sed -i "s/Hostname=/Hostname=${HOST_IP}/g" /apps/zabbix_agent/etc/zabbix_agentd.conf
chown zabbix.zabbix -R /apps/zabbix_agent/
systemctl daemon-reload
systemctl enable zabbix-agent
systemctl restart zabbix-agent
准备部署需要的文件
从原来的受 zabbix 监控的主机(在这里是172.20.32.105)将监控脚本和 agent 监控入口配置文件拷贝到新加的主机(172.20.32.106),此处为Mysql-slave:172.20.32.105原有的受监控主机,WEB-1:172.20.32.106为新加主机,这个新加的主机就是用来编写部署的所有准备文件以及安装包,到时候只要这个机器部署好了环境,就可以整体打包给其他机器进行批量部署。
从之前部署过的机器拷贝相关文件到新的部署机器
root@Mysql-slave:~# cd /etc/zabbix/zabbix_agentd.d/
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# ll
total 44
drwxr-xr-x 2 root root 4096 May 3 16:12 ./
drwxr-xr-x 3 root root 4096 May 3 15:36 ../
-rw-r--r-- 1 root root 82 May 3 15:25 cus.conf
-rwxr-xr-x 1 root root 388 May 1 13:02 linux_tcp_status.sh*
-rwxr-xr-x 1 root root 335 May 1 16:39 memcache_monitor.sh*
-rwxr-xr-x 1 root root 731 May 3 16:12 mysql_monitor.sh*
-rwxr-xr-x 1 root root 1272 May 1 21:33 nginx_status1.sh*
-rwxr-xr-x 1 root root 2047 May 1 21:19 nginx_status.sh*
-rwxr-xr-x 1 root root 563 May 1 19:17 redis_monitor1.sh*
-rwxr-xr-x 1 root root 481 May 1 19:29 redis_monitor.sh*
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# scp cus* 172.20.32.106:/usr/local/src
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# scp *.sh 172.20.32.106:/usr/local/src
root@172.20.32.106's password:
linux_tcp_status.sh 100% 388 449.2KB/s 00:00
memcache_monitor.sh 100% 335 624.2KB/s 00:00
mysql_monitor.sh 100% 731 1.4MB/s 00:00
nginx_status1.sh 100% 1272 3.1MB/s 00:00
nginx_status.sh 100% 2047 3.9MB/s 00:00
redis_monitor1.sh 100% 563 39.1KB/s 00:00
redis_monitor.sh 100% 481 682.0KB/s 00:00
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# scp /etc/zabbix/zabbix_agentd.conf 172.20.32.106:/usr/local/src
root@Mysql-slave:/etc/zabbix/zabbix_agentd.d# scp /etc/zabbix/zabbix_agentd.conf 172.20.32.106:/usr/local/src
在新机器WEB-1:172.20.32.106中:
root@WEB-1:/usr/local/src# ll
total 16852
drwxr-xr-x 4 root root 4096 May 4 14:22 ./
drwxr-xr-x 10 root root 4096 May 4 13:17 ../
-rwxr-xr-x 1 root root 1816 May 4 14:22 compile_install_zabbix.sh* #部署安装脚本
-rw-r--r-- 1 root root 17215217 Apr 29 13:41 zabbix-4.0.20.tar.gz #zabbix源码
-rw-r--r-- 1 root root 13773 May 4 13:17 zabbix_agentd.conf #zabbix agent配置文件
drwxr-xr-x 2 root root 4096 May 4 13:35 zabbix_agentd.conf.d/ #zabbix agent配置文件的包含文件
-rw-r--r-- 1 root root 472 May 4 12:01 zabbix-agent.service #zabbix systemd service文件
root@WEB-1:/usr/local/src# ll zabbix_agentd.conf.d/ #这里需要把上一级目录中的所有脚本文件给mv到此目录,还需要一个监控项自定义入口文件
total 40
drwxr-xr-x 2 root root 4096 May 4 13:35 ./
drwxr-xr-x 4 root root 4096 May 4 14:22 ../
-rw-r--r-- 1 root root 790 May 4 13:18 cus.conf ## 自定义监控项入口
##各服务的监控脚本
-rwxr-xr-x 1 root root 388 May 4 13:26 linux_tcp_status.sh*
-rwxr-xr-x 1 root root 335 May 4 11:42 memcache_monitor.sh*
-rwxr-xr-x 1 root root 731 May 4 11:42 mysql_monitor.sh*
-rwxr-xr-x 1 root root 1272 May 4 13:25 nginx_status1.sh*
-rwxr-xr-x 1 root root 2047 May 4 11:42 nginx_status.sh*
-rwxr-xr-x 1 root root 563 May 4 11:42 redis_monitor1.sh*
-rwxr-xr-x 1 root root 481 May 4 11:42 redis_monitor.sh*
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/cus.conf #这里的脚本路径要和配置文件中的includ路径一致
UserParameter=linux_tcp_status[*],bin/bash /apps/zabbix_agent/etc/zabbix_agentd.conf.d/linux_tcp_status.sh "$1" "$2"
UserParameter=linux_status[*],bin/bash /apps/zabbix_agent/etc/zabbix_agentd.conf.d/linux_tcp_status.sh "$1" "$2"
UserParameter=memcached_status[*],bin/bash /apps/zabbix_agent/etc/zabbix_agentd.conf.d/memcache_monitor.sh "$1" "$2" "$3"
UserParameter=redis_status[*],bin/bash /apps/zabbix_agent/etc/zabbix_agentd.conf.d/redis_monitor.sh "$1" "$2" "$3"
UserParameter=nginx_status[*],bin/bash /apps/zabbix_agent/etc/zabbix_agentd.conf.d/nginx_status1.sh "$1"
UserParameter=nginx.status[*],bin/bash /apps/zabbix_agent/etc/zabbix_agentd.conf.d/nginx_status.sh "$1" "$2" "$3"
UserParameter=mysql_monitor[*],/apps/zabbix_agent/etc/zabbix_agentd.conf.d/mysql_monitor.sh "$1"
agent 配置文件
root@WEB-1:/usr/local/src# vim zabbix_agentd.conf
root@WEB-1:/usr/local/src# grep "^[a-Z]" zabbix_agentd.conf
PidFile=/apps/zabbix_agent/pid/zabbix_agentd.pid
LogFile=/apps/zabbix_agent/logs/zabbix_agentd.log
DebugLevel=4
EnableRemoteCommands=1
LogRemoteCommands=1
Server=172.20.32.102,172.20.32.101
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=5
ServerActive=172.20.32.102
Hostname= #在这里为空,到时候一键部署脚本会部署本机地址上去
Include=/apps/zabbix_agent/etc/zabbix_agentd.conf.d/*.conf #和自定义监控入口中的脚本路径一致
UnsafeUserParameters=1
agent service 文件
root@WEB-1:/usr/local/src# cat zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_agent/etc/zabbix_agentd.conf" #与agent 配置文件保持一致
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_agent/pid/zabbix_agentd.pid #与agent 配置文件保持一致
KillMode=control-group
ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c $CONFFILE #编译路径下的执行命令
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
各监控脚本
root@WEB-1:/usr/local/src# ll zabbix_agentd.conf.d/*
-rw-r--r-- 1 root root 790 May 4 13:18 zabbix_agentd.conf.d/cus.conf
-rwxr-xr-x 1 root root 388 May 4 13:26 zabbix_agentd.conf.d/linux_tcp_status.sh*
-rwxr-xr-x 1 root root 335 May 4 11:42 zabbix_agentd.conf.d/memcache_monitor.sh*
-rwxr-xr-x 1 root root 731 May 4 11:42 zabbix_agentd.conf.d/mysql_monitor.sh*
-rwxr-xr-x 1 root root 1272 May 4 13:25 zabbix_agentd.conf.d/nginx_status1.sh*
-rwxr-xr-x 1 root root 2047 May 4 11:42 zabbix_agentd.conf.d/nginx_status.sh*
-rwxr-xr-x 1 root root 563 May 4 11:42 zabbix_agentd.conf.d/redis_monitor1.sh*
-rwxr-xr-x 1 root root 481 May 4 11:42 zabbix_agentd.conf.d/redis_monitor.sh*
TCP 状态监控
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/linux_tcp_status.sh
#!/bin/bash
#
# Edited on 20200501 by likai.tech
#
tcp_conn_status(){
TCP_STAT=$1
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
TCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
if [ -z $TCP_NUM ];then
TCP_NUM=0
fi
echo $TCP_NUM
}
main(){
case $1 in
tcp_status)
tcp_conn_status $2;
;;
esac
}
main $1 $2
memcache 状态监控
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/memcache_monitor.sh
#!/bin/bash
#
# Edited on 20200501 by likai.tech
#
memcached_status(){
M_PORT=$1
M_COMMAND=$2
echo -e "stats\nquit" | ncat 127.0.0.1 "$M_PORT" | grep -w "STAT $M_COMMAND" | awk '{print $3}'
#ubuntu使用ncat, 安装nmap
}
main(){
case $1 in
memcached_status)
memcached_status $2 $3
;;
esac
}
main $1 $2 $3
nginx 状态监控
脚本一:
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/nginx_status.sh
#!/bin/bash
#
# Edited on 20200501 by likai.tech
#
nginx_status_fun(){ #函数内容
NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
nginx_reading(){ #获取nginx_reading状态的数量
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
nginx_writing(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
nginx_waiting(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
nginx_accepts(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
nginx_handled(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
nginx_requests(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
}
main(){ #主函数内容
case $1 in #分支结构,用于判断用户的输入而进行响应的操作
nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
nginx_status_fun $2 $3;
;;
*) #其他的输入打印帮助信息
echo $"Usage: $0 {nginx_status + PORT + key}"
esac #分支结束符
}
main $1 $2 $3
方法二:
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/nginx_status1.sh
#!/bin/bash
#
# Edited on 20200501 by likai.tech
if [[ $# -eq 0 ]]; then
echo "Usage: `basename $0` get_nginx_status.sh STATS"
fi
save_status(){
/usr/bin/curl http://172.20.32.105/nginx_status 2> /dev/null > /tmp/nginx_status.log
}
get_status(){
case $1 in
active)
active_conns=`/bin/cat /tmp/nginx_status.log | grep -i "active" | awk '{print $3}'`;
echo $active_conns;
;;
accepts)
accepts_conns=`/bin/cat /tmp/nginx_status.log | grep "^ [0-9]" | awk '{print $1}'`;
echo $accepts_conns;
;;
handled)
handled_conns=`/bin/cat /tmp/nginx_status.log | grep "^ [0-9]" | awk '{print $2}'`;
echo $handled_conns;
;;
requests)
requests_conns=`/bin/cat /tmp/nginx_status.log | grep "^ [0-9]" | awk '{print $3}'`;
echo $requests_conns;
;;
reading)
reading_conns=`/bin/cat /tmp/nginx_status.log | tail -n1 | awk '{print $2}'`;
echo $reading_conns;
;;
writing)
writing_conns=`/bin/cat /tmp/nginx_status.log | tail -n1 | awk '{print $4}'`;
echo $writing_conns;
;;
waiting)
waiting_conns=`/bin/cat /tmp/nginx_status.log | tail -n1 | awk '{print $6}'`;
echo $waiting_conns;
esac
}
main(){
save_status
get_status $1
}
main $1
Redis 状态监控
方法一:
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/redis_monitor.sh
#!/bin/bash
#
# Edited on 20200501 by likai.tech
#
redis_status(){
R_PORT=$1
R_COMMAND=$2
(echo -en "INFO \r\n";sleep 1;) | ncat 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp
REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d':' -f2)
echo $REDIS_STAT_VALUE
}
help(){
echo "${0} + redis_status + PORT + COMMAND"
}
main(){
case $1 in
redis_status)
redis_status $2 $3
;;
*)
help
;;
esac
}
main $1 $2 $3
方法二:
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/redis_monitor1.sh
#!/bin/bash
#
# Edited on 20200501 by likai.tech
#
get_redis_status(){
echo -en "INFO \r\n" | ncat 127.0.0.1 $1 | grep -w "$2" | awk -F: '{print $2}'
}
main(){
# install ncat
cat /etc/issue | grep -iq "ubuntu"
[[ $? -ne 0 ]] && yum install nmap-ncat -y &> /dev/null || apt install nmap-ncat -y &> /dev/null
# prompt usage
if [[ $# -eq 0 ]]; then
echo "`basename $0` redis_status <PORT> <STATUS>"
fi
# do the f* thing
if [[ $1 = "redis_status" ]]; then
get_redis_status $2 $3
fi
}
main $1 $2 $3
数据库主从监控
root@WEB-1:/usr/local/src# cat zabbix_agentd.conf.d/mysql_monitor.sh
#!/bin/bash
#
# Edited on 20200503 by likai.tech
#
Seconds_Behind_Master(){
NUM=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`
echo $NUM
}
master_slave_check(){
NUM1=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM1
NUM2=`mysql -uroot -hlocalhost -e "show slave status\G;" | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM2
if test $NUM1 == "Yes" && test $NUM2 == "Yes";then
echo 50
else
echo 100
fi
}
main(){
case $1 in
Seconds_Behind_Master)
Seconds_Behind_Master;
;;
master_slave_check)
master_slave_check;
;;
esac
}
main $1
批量部署到不同主机
通过 ssh 使用脚本批量部署
将 zabbix agent 源码和编译安装脚本推送到远程主机,批量部署 zabbix agent
打包部署需要的 zabbix 源码和配置文件及监控脚本
root@WEB-1:/usr/local/src# ll
total 16848
drwxr-xr-x 3 root root 4096 May 4 14:51 ./
drwxr-xr-x 10 root root 4096 May 4 13:17 ../
-rwxr-xr-x 1 root root 1816 May 4 14:22 compile_install_zabbix.sh*
-rw-r--r-- 1 root root 17215217 Apr 29 13:41 zabbix-4.0.20.tar.gz
-rw-r--r-- 1 root root 13773 May 4 13:17 zabbix_agentd.conf
drwxr-xr-x 2 root root 4096 May 4 13:35 zabbix_agentd.conf.d/
-rw-r--r-- 1 root root 472 May 4 12:01 zabbix-agent.service
root@WEB-1:/usr/local/src# tar -czf zabbix_agent_deploy.tar.gz ./*
root@WEB-1:/usr/local/src# ll zabbix_agent_deploy.tar.gz
-rw-r--r-- 1 root root 17140366 May 4 14:52 zabbix_agent_deploy.tar.gz
编写一键部署脚本
该脚本接收一个参数:$1,$1为主机 IP 列表,每个 IP 为一行的文本文件。主机列表文件和 zabbix agent 部署打包文件与该脚本在同一目录,直接运行该脚本,会首先分发公钥给对端主机,然后将 zabbix agent 部署文件发送到对端,再分别解压安装。
root@WEB-1:/usr/local/src# vim deploy_zabbix_agent_cmd.sh
root@WEB-1:/usr/local/src# cat deploy_zabbix_agent_cmd.sh
#!/bin/bash
#
HOSTS="$1"
DEPLOY_TAR="zabbix_agent_deploy.tar.gz"
ZABBIX_COMPILE_SCRIPT="compile_install_zabbix.sh"
CMD1="cd /usr/local/src && tar xf zabbix_agent_deploy.tar.gz"
CMD2="bash /usr/local/src/compile_install_zabbix.sh"
apt-get install expect -y
if [[ ! -f /root/.ssh/id_rsa ]]; then
ssh-keygen -P "" -f "/root/.ssh/id_rsa"
fi
userpwd="ubantu"
while read ipaddr;do
expect <<EOF
set timeout 100
spawn ssh-copy-id $ipaddr
expect {
"yes/no" {send "yes\n"; exp_continue}
"password" {send "$userpwd\n"}
}
expect eof
EOF
scp ${DEPLOY_TAR} ${ipaddr}:/usr/local/src
scp /etc/apt/sources.list ${ipaddr}:/etc/apt/sources.list
ssh -n "${ipaddr}" "${CMD1}"
ssh -n "${ipaddr}" "${CMD2}"
done < ${HOSTS}
部署测试
root@WEB-1:/usr/local/src# cat hosts.txt
172.20.32.107
172.20.32.108
172.20.32.109
172.20.32.110
root@WEB-1:/usr/local/src# bash deploy_zabbix_agent_cmd.sh hosts.txt
各主机查看 zabbix agent 是否跑起来
root@WEB-2:~# ip addr show eth0 | grep -w inet
inet 172.20.32.107/16 brd 172.20.255.255 scope global eth0
root@WEB-2:~# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 10690 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 10691 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 10692 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 10693 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 10694 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 10695 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 10696 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 10697 zabbix 4u IPv4 36884 0t0 TCP *:zabbix-agent (LISTEN)
root@WEB-3:~# ip addr show eth0 | grep -w inet
inet 172.20.32.108/16 brd 172.20.255.255 scope global eth0
root@WEB-3:~# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 11993 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11999 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12000 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12001 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12002 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12003 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12004 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12005 zabbix 4u IPv4 41079 0t0 TCP *:zabbix-agent (LISTEN)
root@WEB-4:~# ip addr show eth0 | grep -w inet
inet 172.20.32.109/16 brd 172.20.255.255 scope global eth0
root@WEB-4:~# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 11085 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11086 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11087 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11088 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11089 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11090 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11091 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11092 zabbix 4u IPv4 37858 0t0 TCP *:zabbix-agent (LISTEN)
root@WEB-5:~# ip addr show eth0 | grep -w inet
inet 172.20.32.110/16 brd 172.20.255.255 scope global eth0
root@WEB-5:~# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 11089 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11100 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11101 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11102 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11103 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11104 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11105 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11106 zabbix 4u IPv4 37834 0t0 TCP *:zabbix-agent (LISTEN)
使用 ansible 批量部署
使用 ansible 将安装脚本和 zabbix 源码及配置文件等推送到远程主机,再通过 ansible 运行该编译脚本,批量部署 zabbix agent
这里把环境初始化一下,用172.20.32.107主机Ansible-server做控制端服务器
这些为部署的机器
172.20.32.108
172.20.32.109
172.20.32.110
1.将打包好的部署文件上传到 ansible 控制端:172.20.32.107
root@WEB-1:/usr/local/src# scp zabbix_agent_deploy.tar.gz 172.20.32.107:/usr/local/src
2.添加主机到 ansible 主机列表并测试是否可达
root@Ansible-server:/usr/local/src# apt update
root@Ansible-server:/usr/local/src# apt install software-properties-common
root@Ansible-server:/usr/local/src# apt-add-repository --yes --update ppa:ansible/ansible
root@Ansible-server:/usr/local/src# apt install ansible -y
root@Ansible-server:/usr/local/src# ssh-keygen
root@Ansible-server:/usr/local/src# ssh-copy-id 172.20.32.108
root@Ansible-server:/usr/local/src# ssh-copy-id 172.20.32.109
root@Ansible-server:/usr/local/src# ssh-copy-id 172.20.32.110
在ansible配置文件中添加部署的主机
# 添加主机
root@Ansible-server:/usr/local/src# vim /etc/ansible/hosts
[zabbix_agent]
172.20.32.108
172.20.32.109
172.20.32.110
# 测试是否可达
root@Ansible-server:/usr/local/src# ansible zabbix_agent -m ping
172.20.32.109 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
172.20.32.108 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
172.20.32.110 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
3.编写 playbook
root@Ansible-server:/usr/local/src# vim deploy_zabbix_agent.yaml
root@Ansible-server:/usr/local/src# cat deploy_zabbix_agent.yaml
---
- hosts: zabbix_agent
remote_user: root
tasks:
- name: unarchive zabbix_agent_deploy.tar.gz
unarchive: src=/usr/local/src/zabbix_agent_deploy.tar.gz dest=/usr/local/src
- name: run script to install and deploy zabbix agent
shell: chdir=/usr/local/src ./compile_install_zabbix.sh
4.测试 playbook
root@Ansible-server:/usr/local/src# ansible-playbook -C deploy_zabbix_agent.yaml
PLAY [zabbix_agent] *********************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.20.32.109]
ok: [172.20.32.108]
ok: [172.20.32.110]
TASK [unarchive zabbix_agent_deploy.tar.gz] *********************************************************************************************
skipping: [172.20.32.108]
skipping: [172.20.32.110]
skipping: [172.20.32.109]
TASK [run script to install and deploy zabbix agent] ************************************************************************************
skipping: [172.20.32.109]
skipping: [172.20.32.110]
skipping: [172.20.32.108]
PLAY RECAP ******************************************************************************************************************************
172.20.32.108 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
172.20.32.109 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
172.20.32.110 : ok=1 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
5.部署
root@Ansible-server:/usr/local/src# ansible-playbook deploy_zabbix_agent.yaml
PLAY [zabbix_agent] *********************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.20.32.109]
ok: [172.20.32.108]
ok: [172.20.32.110]
TASK [unarchive zabbix_agent_deploy.tar.gz] *********************************************************************************************
ok: [172.20.32.110]
ok: [172.20.32.109]
ok: [172.20.32.108]
TASK [run script to install and deploy zabbix agent] ************************************************************************************
changed: [172.20.32.110]
changed: [172.20.32.108]
changed: [172.20.32.109]
PLAY RECAP ******************************************************************************************************************************
172.20.32.108 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.20.32.109 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.20.32.110 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
root@Ansible-server:/usr/local/src# echo $?
0
6.查看 zabbix agent 在各主机是否以及跑起来
root@WEB-3:/usr/local/src# ip addr show eth0 | grep -w inet
inet 172.20.32.108/16 brd 172.20.255.255 scope global eth0
root@WEB-3:/usr/local/src# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 12162 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12163 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12164 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12165 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12166 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12167 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12168 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12169 zabbix 4u IPv4 50738 0t0 TCP *:zabbix-agent (LISTEN)
root@WEB-3:/usr/local/src# systemctl status zabbix-agent.service
● zabbix-agent.service - Zabbix Agent
Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-05-04 20:19:09 CST; 13min ago
Process: 12160 ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 12162 (zabbix_agentd)
Tasks: 8 (limit: 1006)
CGroup: /system.slice/zabbix-agent.service
······
root@WEB-4:/usr/local/src# ip addr show eth0 | grep -w inet
inet 172.20.32.109/16 brd 172.20.255.255 scope global eth0
root@WEB-4:/usr/local/src#
root@WEB-4:/usr/local/src# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 12008 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12009 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12010 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12011 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12012 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12013 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12014 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 12015 zabbix 4u IPv4 50092 0t0 TCP *:zabbix-agent (LISTEN)
root@WEB-4:/usr/local/src# systemctl status zabbix-agent.service
● zabbix-agent.service - Zabbix Agent
Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-05-04 20:19:09 CST; 13min ago
Process: 12006 ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 12008 (zabbix_agentd)
Tasks: 8 (limit: 1006)
CGroup: /system.slice/zabbix-agent.service
······
root@WEB-5:/usr/local/src# ip addr show eth0 | grep -w inet
inet 172.20.32.110/16 brd 172.20.255.255 scope global eth0
root@WEB-5:/usr/local/src# lsof -i:10050
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 11866 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11867 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11868 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11869 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11870 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11871 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11872 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 11873 zabbix 4u IPv4 48812 0t0 TCP *:zabbix-agent (LISTEN)
root@WEB-5:/usr/local/src# systemctl status zabbix-agent.service
lines 1--1...skipping...
● zabbix-agent.service - Zabbix Agent
Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-05-04 20:19:09 CST; 13min ago
Process: 11864 ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 11866 (zabbix_agentd)
Tasks: 8 (limit: 1006)
CGroup: /system.slice/zabbix-agent.service
······