linux运维工程师必会linux tools

四、批量部署zabbix agent以及web监控

2019-07-21  本文已影响9人  M36_tongwei

批量部署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.png
image.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
image.png
上一篇下一篇

猜你喜欢

热点阅读