批量部署zabbix agent
批量部署需要提前在一台设备上做实验,写好脚本和脚本部署过程中需要的文件提前准备好,将这些准备好的文件打包好,拷贝到需要部署zabbix-agent服务器上解压,执行脚本自动部署。
[root@node5 ~]#cd /data/
[root@node5 data]#ls
linux36-zabbix-agent-install.tar.gz
[root@node5 data]#tar xf linux36-zabbix-agent-install.tar.gz
[root@node5 data]#ls
linux36.conf zabbix-4.0.10.tar.gz zabbix-agent.service
linux36-zabbix-agent-install.tar.gz zabbix_agentd.conf
nginx_status.sh zabbix-agent-install.sh
自动部署脚本
[root@node5 data]#cat zabbix-agent-install.sh
#!/bin/bash
#
grep "Kernel" /etc/issue &> /dev/null
if [ $? -eq 0 ]; then
yum install 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 net-tools -y
fi
grep "Ubuntu" /etc/issue &> /dev/null
if [ $? -eq 0 ]; then
apt install -y gcc g++ make libpcre3-dev
fi
DIR=`pwd`
useradd zabbix
tar xf zabbix-4.0.10.tar.gz && cd zabbix-4.0.10 && ./configure --prefix=/apps/zabbix_agent --enable-agent && make && make install
mkdir /apps/zabbix_agent/data
\cp ${DIR}/zabbix_agentd.conf /apps/zabbix_agent/etc/zabbix_agentd.conf
\cp ${DIR}/zabbix-agent.service /usr/lib/systemd/system/zabbix-agent.service
#注:如果是ubuntu系统\cp ${DIR}/zabbix-agent.service /usr/lib/systemd/system/zabbix-agent.service
\cp ${DIR}/nginx_status.sh /apps/zabbix_agent/etc/zabbix_agentd.conf.d/
\cp ${DIR}/linux36.conf /apps/zabbix_agent/etc/zabbix_agentd.conf.d/
IP=`ifconfig eth0 | grep -w inet | awk -F" " '{print $2}'`
chmod +x /apps/zabbix_agent/etc/zabbix_agentd.conf.d/nginx_status.sh
sed -i 's/^Hostname=/Hostname='${IP}'/g' /apps/zabbix_agent/etc/zabbix_agentd.conf
chown zabbix.zabbix /apps/zabbix_agent/ -R
systemctl daemon-reload
systemctl start zabbix-agent && systemctl enable zabbix-agent
[root@node5 data]#grep ^[a-Z] zabbix_agentd.conf
PidFile=/apps/zabbix_agent/data/zabbix_agentd.pid #pid存放地方,与启动脚本要一致
LogType=file
LogFile=/apps/zabbix_agent/data/zabbix_agentd.log #定义的日志存放路径
LogFileSize=0
EnableRemoteCommands=1 #开启远程命令
Server=192.168.18.111,192.168.18.115 注:zabbix-server ip和zabbix proxy主机ip
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3
ServerActive=192.168.18.115 #proxy主动模式,zabbix proxy主机ip
Hostname=
Timeout=30 #该时间延迟一定要改长点,30s够了
Include=/apps/zabbix_agent/etc/zabbix_agentd.conf.d/*.conf #配置文件包括zabbix_agentd.conf.d目录下的
UnsafeUserParameters=1 #支持特殊字符
自定义系统服务配置文件
[root@node5 data]#cat zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_agent/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/apps/zabbix_agent/data/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_agent/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
需要监控项的脚本提前准备好
[root@node5 data]#cat nginx_status.sh
#!/bin/bash
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 key}"
esac #分支结束符
}
main $1 $2 $3
单独定义的配置文件
[root@node5 data]#cat linux36.conf
UserParameter=nginx.status[*],/apps/zabbix_agent/etc/zabbix_agentd.conf.d/nginx_status.sh $1 $2 $3
拷贝到需要部署的服务器之后,允许自动安装脚本,完成zabbix agent的编译安装
[root@node5 data]#ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@node5 data]#bash zabbix-agent-install.sh
....
make[2]: Leaving directory `/data/zabbix-4.0.10'
make[1]: Leaving directory `/data/zabbix-4.0.10'
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
[root@node5 data]#ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:10050 *:*
注:10050端口,说明部署完成
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@node5 data]#yum -y install epel-release
[root@node5 data]#yum -y install nginx
[root@node5 data]#systemctl start nginx && systemctl enable nginx
[root@node5 data]#ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 511 *:80 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 511 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@node5 data]#vim /etc/nginx/nginx.conf
...
location / {
}
location /nginx_status { 注:配置nginx状态页面配置
stub_status;
}
...
[root@node5 data]#systemctl restart nginx
image.png
在zabbix server的web界面上添加被监控主机
image.pngimage.png
image.png
image.png
web监控
存在一种情况:nginx或者httpd服务本身运行正常,但是网页挂了,类似于网页被黑,或者40X之类的...
可以用zabbix把web页面访问也监控起来,第一时间得知web崩溃信息并做相应处理。
本实验的检查方法有一个缺点,是从zabbix server所在的网络环境的主机上进行检测,此种方法不可取,通常web网站监控采用第三方监控进行监控
在上面的实验的基础上操作
image.png
image.png image.png
image.png
image.png
image.png
网友评论