43.第35章 Zabbix


一.zabbix 主動與被動監控模式

被動模式:
無論是模式還是被動模式,都是站在zabbix agent角度來說的工作模式,比如被動模式,是說zabbix agent被動的接受zabbix server周期性發送過來的數據收集指令,在被動模式之下,zabbix server會根據主機關聯的模板中的監控項和數據采集間隔時間,周期性的打開隨機端口並向zabbix agent服務器的10050發起tcp連接,然后發送獲取監控項數據的指令,即zabbix server發送什么指令那么zabbix agent就收集什么數據,zabbix server什么時候發送zabbix agent就什么時候采集,zabbix server不發送zabbix agent就一直不響應,所以zabbix agent也不用關心其監控項和數據采集周期間隔時間。
被動模式的優點就是配置簡單,安裝后即可使用,因此也成為zabbix 的默認工作模式,但是被動模式的最大問題就是會加大zabbix server的工作量,在數百甚至數千台服務器的環境下會導致zabbix server需要輪訓向每個zabbix agent發送數據采集指令,如果zabbix server負載很高還會導致不能及時獲取到最新數據,但由於無需其他復雜配置,被設置為了默認的工作方式。

主動模式:
主動模式是由zabbix agent主動向zabbix server的10051端口發起tcp連接請求,因此主動模式下必須在zabbixagent配置文件中指定zabbix server的IP或者主機名(必須可以被解析為IP地址),在連接到zabbix server之前zabbix agent是不知道自己要采集那些數據以及間隔多久采集一次數據的,然后在連接到zabbix server以后獲取到自己的監控項和數據采集間隔周期時間,然后再根據監控項采集數據並返回給zabbix server,在主動模式下不再需要zabbix serve向zabbix agent發起連接請求,因此主動模式在一定程度上可減輕zabbix server打開的本地隨機端口和進程數,在一定程度就減輕看zabbix server的壓力。

二. 如何自定義監控項:

  1. 先通過腳本或命令獲取監控項數據

  2. 將腳本或命令添加到zabbix agent配置文件中的自定義監控項並重啟

    UserParameter=n50[*],/bin/bash /data/scripts/n50.sh $1

    UserParameter=n51,/usr/bin/python3 /data/scripts/n50.py

    UserParameter=tcp_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/tcp_status.sh $1 $2

  3. 在zabbix server使用zabbix_get命令測試監控項能否獲取到數據

    zabbix_get -s 10.0.0.107 -p 10050 -k "tcp_status["tcp_status","ESTAB"]"

  4. 在zabbix web添加監控項、觸發器、圖形或者創建模板

  5. 驗證數據

三.zabbix安裝

1.安裝數據庫

[root@centos7-2 src]# cat install_mysql5.7_v3.sh 
#!/bin/bash
#
#******************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-06-01
#FileName:      install_mysql5.7_v3.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_mysql5.7 for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#******************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'
MYSQL_URL=https://mirrors.cloud.tencent.com/mysql/downloads/MySQL-
MYSQL_VERSION='5.7/'
MYSQL_FILE='mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz'
MYSQL_ROOT_PASSWORD=123456
PASSWORD=123456

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
    OS_RELEASE_VERSION=`lsb_release -rs |awk -F'.' '{print $1}'`
}

check_file(){
    cd  ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${MYSQL_FILE} ];then
        ${COLOR}"缺少${MYSQL_FILE}文件"${END}
        ${COLOR}'開始下載MYSQL二進制安裝包'${END}
        wget ${MYSQL_URL}${MYSQL_VERSION}${MYSQL_FILE} || { ${COLOR}"MYSQL二進制安裝包下載失敗"${END}; exit; }
    else
        ${COLOR}"${MYSQL_FILE}文件已准備好"${END}
    fi
}

install_mysql(){
    [ -d /usr/local/mysql ] && { ${COLOR}"MySQL數據庫已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝MySQL數據庫..."${END}
    ${COLOR}'開始安裝MYSQL依賴包'${END}
    if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
        yum -y install libaio perl-Data-Dumper ncurses-compat-libs &> /dev/null
    elif [[ ${OS_RELEASE_VERSION} == 7 ]] &> /dev/null;then
        yum -y install libaio perl-Data-Dumper &> /dev/null
    else
        apt update &> /dev/null;apt -y install numactl libaio-dev libtinfo5 &> /dev/null
    fi
    cd  ${SRC_DIR}
    tar xf ${MYSQL_FILE} -C /usr/local/
    MYSQL_DIR=`echo ${MYSQL_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    ln -s  /usr/local/${MYSQL_DIR} /usr/local/mysql
    id mysql &> /dev/null || { useradd -s /sbin/nologin -r  mysql ; ${COLOR}"創建mysql用戶"${END}; }
    chown -R  mysql.mysql /usr/local/mysql/
    echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
    .  /etc/profile.d/mysql.sh
    cat > /etc/my.cnf <<-EOF
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
    [ -d /data/mysql ] || mkdir -p /data/mysql &> /dev/null
    chown -R  mysql.mysql /data/mysql
    mysqld --initialize --user=mysql --datadir=/data/mysql 
    cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        chkconfig --add mysqld
    else
        update-rc.d -f mysqld defaults
    fi
    cat > /lib/systemd/system/mysqld.service <<-EOF
[Unit]
Description=mysql database server
After=network.target

[Service]
Type=notify
PrivateNetwork=false
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d//mysqld stop
ExecReload=/etc/init.d/mysqld reload

[Install]
WantedBy=multi-user.target
Alias=mysqld.service
EOF
    systemctl daemon-reload
    systemctl enable --now mysqld &> /dev/null
    [ $? -ne 0 ] && { ${COLOR}"數據庫啟動失敗,退出!"${END};exit; }
    MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`
    mysqladmin  -uroot -p${MYSQL_OLDPASSWORD} password ${MYSQL_ROOT_PASSWORD} &>/dev/null
    ${COLOR}"MySQL數據庫安裝完成"${END}
}

create_database(){
    mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database zabbix_server character set utf8 collate utf8_bin;grant all privileges on zabbix_server.* to zabbix@'10.0.0.%' identified by '${PASSWORD}';" &>/dev/null

    mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database zabbix_proxy_passive character set utf8 collate utf8_bin;grant all privileges on zabbix_proxy_passive.* to proxy@'10.0.0.%' identified by '${PASSWORD}';" &>/dev/null

    mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database zabbix_proxy_active character set utf8 collate utf8_bin;grant all privileges on zabbix_proxy_active.* to proxy@'10.0.0.%' identified by '${PASSWORD}';" &>/dev/null
}

main(){
    os
    check_file
    install_mysql
    create_database
}

main

2.安裝zabbix server

[root@centos7 src]# grep "^[^#]" zabbix_server.conf 
ListenPort=10051
LogFile=/tmp/zabbix_server.log
LogFileSize=0
DBName=zabbix
DBUser=zabbix
DBPort=3306
StartPollers=6
StartPreprocessors=4
StartPollersUnreachable=1
StartTrappers=5
StartPingers=3
StartHTTPPollers=2
StartTimers=2
StartEscalators=2
StartAlerters=3
SNMPTrapperFile=/tmp/zabbix_traps.tmp
HousekeepingFrequency=8
MaxHousekeeperDelete=1000000
CacheSize=16M
CacheUpdateFrequency=180
StartDBSyncers=4
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
TrendCacheSize=4M
ValueCacheSize=8M
Timeout=5
TrapperTimeout=300
UnreachablePeriod=10
UnavailableDelay=5
UnreachableDelay=5
LogSlowQueries=3000
StartProxyPollers=3
ProxyConfigFrequency=30
ProxyDataFrequency=30

[root@centos7 src]# cat install_zabbix_server.sh 
#!/bin/bash
#
#********************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-06-08
#FileName:      install_zabbix_server.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_server for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#********************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_SERVER_CONF=zabbix_server.conf
FONT=simkai.ttf
ZABBIX_INSTALL_DIR=/apps/zabbix_server

PASSWORD=123456

#數據庫IP地址,根據實際情況修改
DBHOST=10.0.0.17

DBNAME=zabbix_server
ZABBIX_SERVER=`ip addr| awk -F" +|/" '/global/{print $3}'`

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
    OS_RELEASE_VERSION=`lsb_release -rs |awk -F'.' '{print $1}'`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
    if [ ! -e ${ZABBIX_SERVER_CONF} ];then
        ${COLOR}"缺少${ZABBIX_SERVER_CONF}文件"${END}
        exit
    elif [ ! -e ${FONT} ];then
        ${COLOR}"缺少${FONT}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_zabbix_server(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix server已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix server"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }

    ${COLOR}"開始安裝Zabbix server依賴包"${END}
    if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
        yum -y install java-1.8.0-openjdk-devel httpd php php-mysqli php-common php-gd php-mbstring libtomcrypt-devel php-devel php-xml php-bcmath gcc gcc-c++  net-snmp-devel libssh2 libssh2-devel curl-devel unixODBC-devel mysql-devel libxml2-devel libcurl-devel libevent-devel &> /dev/null
    elif [[ ${OS_RELEASE_VERSION} == 7 ]] &> /dev/null;then
        yum -y install java-1.8.0-openjdk-devel httpd php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml php-bcmath gcc gcc-c++  net-snmp-devel libssh2 libssh2-devel curl-devel unixODBC-devel mysql-devel libxml2-devel libcurl-devel libevent-devel &> /dev/null
    else
        apt update &> /dev/null;apt -y install make apache2 apache2-bin apache2-data apache2-utils fontconfig-config fonts-dejavu-core fping libapache2-mod-php libapache2-mod-php7.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libfontconfig1 libgd3 libiksemel3 libjbig0 libjpeg-turbo8 libjpeg8 liblua5.2-0 libodbc1 libopenipmi0 libsensors4 libsnmp-base libsnmp30 libsodium23 libssh2-1 libtiff5 libwebp6 libxpm4 php-bcmath php-common php-gd php-ldap php-mbstring php-mysql php-xml php7.2-bcmath php7.2-cli php7.2-common php7.2-gd php7.2-json php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml snmpd ssl-cert ttf-dejavu-core libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev openjdk-8-jdk curl libcurl4-openssl-dev &> /dev/null
	fi
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }
    echo "PATH=${ZABBIX_INSTALL_DIR}/sbin:${ZABBIX_INSTALL_DIR}/bin:${PATH}" > /etc/profile.d/zabbix.sh

    ${COLOR}"開始導入數據庫"${END}
    if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
        yum -y install mysql &> /dev/null
    elif [[ ${OS_RELEASE_VERSION} == 7 ]] &> /dev/null;then	
        yum -y install mariadb &> /dev/null
    else
        apt -y install mysql-client &> /dev/null
	fi
    cd ${SRC_DIR}/${ZABBIX_DIR}/database/mysql/
    mysql -uzabbix -p${PASSWORD} -h${DBHOST} ${DBNAME} < schema.sql &> /dev/null
    mysql -uzabbix -p${PASSWORD} -h${DBHOST} ${DBNAME} < images.sql &> /dev/null
    mysql -uzabbix -p${PASSWORD} -h${DBHOST} ${DBNAME} < data.sql &> /dev/null

    cd ${SRC_DIR}
    mv ${ZABBIX_SERVER_CONF} ${ZABBIX_INSTALL_DIR}/etc/
    sed -i -e 's/# DBHost=.*/DBHost='${DBHOST}'/' -e 's/^DBName=.*/DBName='${DBNAME}'/' -e 's/# DBPassword=/DBPassword='${PASSWORD}'/' -e 's@# AlertScriptsPath=.*@AlertScriptsPath='${ZABBIX_INSTALL_DIR}'/share/zabbix/alertscripts@' -e 's@# ExternalScripts=.*@ExternalScripts='${ZABBIX_INSTALL_DIR}'/share/zabbix/externalscripts@' ${ZABBIX_INSTALL_DIR}/etc/zabbix_server.conf
    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}

    mkdir -p /var/www/html/zabbix
    cd ${SRC_DIR}/${ZABBIX_DIR}/frontends/php/
    cp -a . /var/www/html/zabbix/

    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        sed -i -e 's@post_max_size = .*@post_max_size = 16M@' -e 's@max_execution_time = .*@max_execution_time = 300@' -e 's@max_input_time = .*@max_input_time = 300@' -e 's@;date.timezone =@date.timezone = Asia/Shanghai@' /etc/php.ini
        systemctl restart httpd;systemctl enable httpd &> /dev/null
    else
        ${COLOR}"開始安裝Zabbix WEB依賴包"${END}
        apt -y install php-gettext php-xml php-net-socket php-gd php-mysql &> /dev/null
        sed -i -e 's@post_max_size = .*@post_max_size = 16M@' -e 's@max_execution_time = .*@max_execution_time = 300@' -e 's@max_input_time = .*@max_input_time = 300@' -e 's@;date.timezone =@date.timezone = Asia/Shanghai@' /etc/php/7.2/apache2/php.ini
        systemctl restart apache2;systemctl enable apache2 &> /dev/null
    fi
	
    cat > /var/www/html/zabbix/conf/zabbix.conf.php <<-EOF
<?php
// Zabbix GUI configuration file.
global \$DB;

\$DB['TYPE']     = 'MYSQL';
\$DB['SERVER']   = '${DBHOST}';
\$DB['PORT']     = '3306';
\$DB['DATABASE'] = '${DBNAME}';
\$DB['USER']     = 'zabbix';
\$DB['PASSWORD'] = '${PASSWORD}';

// Schema name. Used for IBM DB2 and PostgreSQL.
\$DB['SCHEMA'] = '';

\$ZBX_SERVER      = '${ZABBIX_SERVER}';
\$ZBX_SERVER_PORT = '10051';
\$ZBX_SERVER_NAME = 'zabbix-server';

\$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
EOF

    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        TIMEOUTSEC=0
        ENVIRONMENTFILE_DIR=sysconfig
    else
        TIMEOUTSEC=infinity
        ENVIRONMENTFILE_DIR=default
    fi
    cat > /lib/systemd/system/zabbix-server.service <<-EOF
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=${ZABBIX_INSTALL_DIR}/etc/zabbix_server.conf"
EnvironmentFile=-/etc/${ENVIRONMENTFILE_DIR}/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_server -c \$CONFFILE
ExecStop=/bin/kill -SIGTERM \$MAINPID
RestartSec=10s
TimeoutSec=${TIMEOUTSEC}

[Install]
WantedBy=multi-user.target
EOF

    cat > /lib/systemd/system/zabbix-agent.service <<-EOF
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/${ENVIRONMENTFILE_DIR}/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_agentd -c \$CONFFILE
ExecStop=/bin/kill -SIGTERM \$MAINPID
RestartSec=10s
TimeoutSec=${TIMEOUTSEC}
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now zabbix-server zabbix-agent &> /dev/null
    systemctl is-active zabbix-server &> /dev/null ||  { ${COLOR}"Zabbix-server 啟動失敗,退出!"${END} ; exit; }
    systemctl is-active zabbix-agent &> /dev/null ||  { ${COLOR}"Zabbix-agent 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix server安裝完成"${END}
}

cn_zabbix(){
    ${COLOR}"開始安裝Zabbix server中文環境"${END}
    if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
        yum -y install langpacks-zh_CN &> /dev/null
        echo 'LANG="zh_CN.UTF-8""' >> /etc/locale.conf
        systemctl restart httpd
    fi
    if [ ${OS_ID} == "Ubuntu" ] &> /dev/null;then
        apt-get install language-pack-zh*
        echo 'LANG="zh_CN.UTF-8"' >> /etc/environment
        dpkg-reconfigure locales
        systemctl restart apache2
    fi

    cd ${SRC_DIR}
    mv simkai.ttf /var/www/html/zabbix/assets/fonts
    chown zabbix.zabbix /var/www/html/zabbix/assets/fonts -R
    sed -i.bak -e "72cdefine('ZBX_GRAPH_FONT_NAME',       'simkai');" -e "113cdefine('ZBX_FONT_NAME', 'simkai');" /var/www/html/zabbix/include/defines.inc.php 
    ${COLOR}"Zabbix server中文環境安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_server
    cn_zabbix
}

main

注意:ubuntu安裝要手動選擇語言


默認用戶名:Admin 密碼:zabbix

選擇用戶,更改語言為中文

3.安裝被動模式zabbix agent

[root@centos7-3 src]# grep "^[^#]" zabbix_agentd_passive.conf 
LogFile=/tmp/zabbix_agentd.log
LogFileSize=0
DebugLevel=3
Server=127.0.0.1
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=5
ServerActive=127.0.0.1
Hostname=Zabbix server

[root@centos7-3 src]# cat install_zabbix_agent_passive.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-05-29
#FileName:      install_zabbix_agent_passive.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_agent_passive for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_AGENT_CONF=zabbix_agentd_passive.conf
ZABBIX_INSTALL_DIR=/apps/zabbix_agent

#zabbix server ip地址根據實際情況修改
SERVER=10.0.0.7

HOSTNAME=`ip addr| awk -F" +|/" '/global/{print $3}'`

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
    if [ ! -e ${ZABBIX_AGENT_CONF} ];then
        ${COLOR}"缺少${ZABBIX_AGENT_CONF}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_zabbix_agent(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix agent已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix agent"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }
    
    ${COLOR}"開始安裝Zabbix agent依賴包"${END}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib-devellibevent libevent-devel &> /dev/null
    else
        apt update &> /dev/null;apt -y install libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc make &> /dev/null
    fi
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-agent
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }
    echo "PATH=${ZABBIX_INSTALL_DIR}/sbin:${ZABBIX_INSTALL_DIR}/bin:${PATH}" > /etc/profile.d/zabbix.sh

    cd ${SRC_DIR}
    mv ${ZABBIX_AGENT_CONF} ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    sed -i.bak -e "s/^Server=.*/Server=${SERVER}/" -e "s/^Hostname=.*/Hostname=${HOSTNAME}/" ${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf
    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}

     cat > /lib/systemd/system/zabbix-agent.service <<-EOF
[Unit]                                                                                                                 
Description=Zabbix Agent
Documentation=man:zabbix_agentd
After=network.target

[Service]
Type=simple
User=zabbix
Group=zabbix
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_agentd --foreground
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now zabbix-agent &> /dev/null
    systemctl is-active zabbix-agent &> /dev/null ||  { ${COLOR}"Zabbix-agent 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix agent安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_agent
}

main

添加監控主機

添加模板

4.添加tomcat監控和安裝java_gateway

#安裝java環境和tomcat
[root@centos7-3 src]# cat install_java_tomcat.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-06-04
#FileName:      install_jdk_tomcat.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_jdk_tomcat for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

JAVA_FILE=jdk-8u291-linux-x64.tar.gz
JAVA_DIR=jdk1.8.0_291

TOMCAT_FILE=apache-tomcat-9.0.46.tar.gz
TOMCAT_HOSTNAME=`ip addr| awk -F" +|/" '/global/{print $3}'`

check_file(){
    cd ${SRC_DIR}
    if [ ! -e ${JAVA_FILE} ];then
        ${COLOR}"缺少${JAVA_FILE}文件"${END}
        exit
    elif [ ! -e ${TOMCAT_FILE} ];then
        ${COLOR}"TOMCAT_FILE}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_java(){
    ${COLOR}"開始安裝JAVA"${END}
    cd ${SRC_DIR}
    tar xf ${JAVA_FILE}
    ln -sv /usr/local/src/${JAVA_DIR}/ /usr/local/jdk
    cat >> /etc/profile <<-EOF
export JAVA_HOME=/usr/local/jdk
export TOMCAT_HOME=/apps/tomcat
export PATH=\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin:\$TOMCAT_HOME/bin:\$PATH
export CLASSPATH=.\$CLASSPATH:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib/tools.jar
EOF
    source /etc/profile
    ${COLOR}"JAVA安裝完成"${END}
}

install_tomcat(){
    ${COLOR}"開始安裝TOMCAT"${END}
    mkdir /apps
    mv ${TOMCAT_FILE} /apps/
    cd /apps/
    tar xf ${TOMCAT_FILE}
    TOMCAT_DIR=`echo ${TOMCAT_FILE} | sed -nr 's/^(.*[0-9]).*/\1/p'`
    sed -i '125cCATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname='${TOMCAT_HOSTNAME}'"' /apps/${TOMCAT_DIR}/bin/catalina.sh
    /apps/${TOMCAT_DIR}/bin/catalina.sh start
    ${COLOR}"TOMCAT安裝完成"${END}
}

main(){
    check_file
    install_java
    install_tomcat
}

main
#安裝java_gateway
[root@centos7-4 src]# cat install_zabbix_java_gateway.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-06-04
#FileName:      install_zabbix_java_gateway.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_java_gateway for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_INSTALL_DIR=/apps/zabbix_java_gateway

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
}

install_zabbix_java_gateway(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix java-gateway已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix agent"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }
    ${COLOR}"開始安裝Zabbix java-gateway依賴包"${END}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        yum -y install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php phpbcmath php-mbstring mariadb-devel java-1.8.0-openjdk-devel &> /dev/null
    else
        apt -y install libmysqld-dev libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev  libcurl4-openssl-dev openjdk-8-jdk make gcc &> /dev/null
    fi
    cd ${SRC_DIR}
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-java --with-net-snmp --with-mysql --with-ssh2
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }

    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}
    
    cat > /lib/systemd/system/zabbix-java-gateway.service <<-EOF
[Unit]                                                                                                                  
Description=Zabbix Java Gateway
After=syslog.target
After=network.target

[Service]
Type=forking
KillMode=process
PIDFile=/tmp/zabbix_java.pid
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_java/startup.sh
SuccessExitStatus=143
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target
EOF
    systemctl daemon-reload
    systemctl enable --now zabbix-java-gateway &> /dev/null
    systemctl is-active zabbix-java-gateway &> /dev/null ||  { ${COLOR}"Zabbix-java-gateway 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix java-gateway安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_java_gateway
}

main


[root@centos7 src]# vim /apps/zabbix_server/etc/zabbix_server.conf
JavaGateway=10.0.0.37
JavaGatewayPort=10052
StartJavaPollers=10
:wq

[root@centos7 src]# systemctl restart zabbix-server

添加jmx監控

導入tomcat模板

添加tomcat模板

5.安裝主動模式zabbix agent

[root@centos7-5 src]# grep "^[^#]" zabbix_agentd_active.conf 
LogFileSize=0
DebugLevel=3
EnableRemoteCommands=1
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
Timeout=30
UnsafeUserParameters=1

[root@centos7-5 src]# cat install_zabbix_agent_active.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-05-29
#FileName:      install_zabbix_agent_active.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_agent_active for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_AGENT_CONF=zabbix_agentd_active.conf
ZABBIX_INSTALL_DIR=/apps/zabbix_agent

#zabbix server ip地址根據實際情況修改
SERVER=10.0.0.7
SERVERACTIVE=10.0.0.7

HOSTNAME=`ip addr | awk -F" +|/" '/global/{print $3}'`

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
    if [ ! -e ${ZABBIX_AGENT_CONF} ];then
        ${COLOR}"缺少${ZABBIX_AGENT_CONF}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_zabbix_agent(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix agent已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix agent"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }
    
    ${COLOR}"開始安裝Zabbix agent依賴包"${END}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib-devellibevent libevent-devel &> /dev/null
    else
        apt update &> /dev/null;apt -y install libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc make &> /dev/null
    fi
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-agent
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }
    echo "PATH=${ZABBIX_INSTALL_DIR}/sbin:${ZABBIX_INSTALL_DIR}/bin:${PATH}" > /etc/profile.d/zabbix.sh

    cd ${SRC_DIR}
    mv ${ZABBIX_AGENT_CONF} ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    sed -i.bak -e "s/^Server=.*/Server=${SERVER}/" -e "s/^ServerActive=.*/ServerActive=${SERVERACTIVE}/" -e "s/^Hostname=.*/Hostname=${HOSTNAME}/" ${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf
    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}

     cat > /lib/systemd/system/zabbix-agent.service <<-EOF
[Unit]                                                                                                                 
Description=Zabbix Agent
Documentation=man:zabbix_agentd
After=network.target

[Service]
Type=simple
User=zabbix
Group=zabbix
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_agentd --foreground
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now zabbix-agent &> /dev/null
    systemctl is-active zabbix-agent &> /dev/null ||  { ${COLOR}"Zabbix-agent 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix agent安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_agent
}

main

添加主動模式監控項

把監控類型改為主動模式

6.安裝被動模式zabbix proxy

[root@centos7-6 src]# grep "^[^#]" zabbix_proxy_passive.conf 
ProxyMode=1
Server=127.0.0.1
ServerPort=10051
Hostname=Zabbix proxy 
LogFile=/tmp/zabbix_proxy.log
LogFileSize=0
DebugLevel=3
DBName=zabbix_proxy
DBUser=zabbix
DBPort=3306
ProxyLocalBuffer=360
ProxyOfflineBuffer=720
StartPollers=5
StartPollersUnreachable=1
StartTrappers=5
StartPingers=1
StartDiscoverers=1
StartHTTPPollers=1
SNMPTrapperFile=/tmp/zabbix_traps.tmp
ListenIP=0.0.0.0
HousekeepingFrequency=1
CacheSize=8M
StartDBSyncers=4
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
Timeout=30
TrapperTimeout=30
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
LogSlowQueries=3000

[root@centos7-6 src]# cat install_zabbix_proxy_passive.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-05-28
#FileName:      install_zabbix_proxy_passive.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_proxy_passive for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_PROXY_CONF=zabbix_proxy_passive.conf
ZABBIX_INSTALL_DIR=/apps/zabbix_proxy

DBUSER=proxy
PASSWORD=123456
#數據庫ip地址根據實際情況修改
DBHOST=10.0.0.17

DBNAME=zabbix_proxy_passive

#zabbix server ip地址根據實際情況修改
SERVER=10.0.0.7

HOSTNAME=neteagle-proxy-passive

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
    OS_RELEASE_VERSION=`lsb_release -rs |awk -F'.' '{print $1}'`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
    if [ ! -e ${ZABBIX_PROXY_CONF} ];then
        ${COLOR}"缺少${ZABBIX_PROXY_CONF}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_zabbix_proxy(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix proxy已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix proxy"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }
    
    ${COLOR}"開始安裝Zabbix proxy依賴包"${END}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        yum -y install gcc gcc-c++ mysql-devel libmysqlclient-dev libxml2-devel net-snmp-devel libevent-devel libcurl-devel libssh2 libssh2-devel java-1.8.0-openjdk-devel
    else
        apt update &> /dev/null;apt -y install libmysqld-dev libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev curl libcurl4-openssl-dev openjdk-8-jdk make &> /dev/null
    fi
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-proxy --enable-agent --enable-java --with-mysql --with-net-snmp --with-libcurl --with-libxml2
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }
    echo "PATH=${ZABBIX_INSTALL_DIR}/sbin:${ZABBIX_INSTALL_DIR}/bin:${PATH}" > /etc/profile.d/zabbix.sh

    ${COLOR}"開始導入數據庫"${END}
    if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
        yum -y install mysql &> /dev/null
    elif [[ ${OS_RELEASE_VERSION} == 7 ]] &> /dev/null;then 
        yum -y install mariadb &> /dev/null
    else
        apt -y install mysql-client &> /dev/null
    fi
    cd ${SRC_DIR}/${ZABBIX_DIR}/database/mysql/
    mysql -u${DBUSER} -p${PASSWORD} -h${DBHOST} ${DBNAME} < schema.sql

    cd ${SRC_DIR}
    mv ${ZABBIX_PROXY_CONF} ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    sed -i.bak -e 's/^Server=.*/Server='${SERVER}'/' -e 's/^Hostname=.*/Hostname='${HOSTNAME}'/' -e 's/^# DBHost=.*/DBHost='${DBHOST}'/' -e 's/^DBName=.*/DBName='${DBNAME}'/' -e 's/^DBUser=.*/DBUser='${DBUSER}'/' -e 's/# DBPassword=/DBPassword='${PASSWORD}'/' ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}

    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        TIMEOUTSEC=0
        ENVIRONMENTFILE_DIR=sysconfig
    else
        TIMEOUTSEC=infinity
        ENVIRONMENTFILE_DIR=default
    fi
    cat > /lib/systemd/system/zabbix-proxy.service <<-EOF
[Unit]
Description=Zabbix Proxy
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf"
EnvironmentFile=-/etc/${ENVIRONMENTFILE_DIR}/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_proxy.pid
KillMode=control-group
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_proxy -c \$CONFFILE
ExecStop=/bin/kill -SIGTERM \$MAINPID
RestartSec=10s
TimeoutSec=${TIMEOUTSEC}
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now zabbix-proxy &> /dev/null
    systemctl is-active zabbix-proxy &> /dev/null ||  { ${COLOR}"Zabbix-proxy 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix proxy安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_proxy
}

main

7.安裝被動模式zabbix agent使用proxy

[root@eentos7-7 src]# cat install_zabbix_agent_proxy_passive.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-05-29
#FileName:      install_zabbix_agent_proxy_passive.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_agent_proxy_passive for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_AGENT_CONF=zabbix_agentd_passive.conf
ZABBIX_INSTALL_DIR=/apps/zabbix_agent

#zabbix server ip地址和agent ip地址根據實際情況修改
SERVER=10.0.0.7,10.0.0.57

HOSTNAME=`ip addr| awk -F" +|/" '/global/{print $3}'`

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
    if [ ! -e ${ZABBIX_AGENT_CONF} ];then
        ${COLOR}"缺少${ZABBIX_AGENT_CONF}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_zabbix_agent(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix agent已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix agent"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }
    
    ${COLOR}"開始安裝Zabbix agent依賴包"${END}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib-devellibevent libevent-devel &> /dev/null
    else
        apt update &> /dev/null;apt -y install libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc make &> /dev/null
    fi
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-agent
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }
    echo "PATH=${ZABBIX_INSTALL_DIR}/sbin:${ZABBIX_INSTALL_DIR}/bin:${PATH}" > /etc/profile.d/zabbix.sh

    cd ${SRC_DIR}
    mv ${ZABBIX_AGENT_CONF} ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    sed -i.bak -e "s/^Server=.*/Server=${SERVER}/" -e "s/^Hostname=.*/Hostname=${HOSTNAME}/" ${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf
    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}

     cat > /lib/systemd/system/zabbix-agent.service <<-EOF
[Unit]                                                                                                                 
Description=Zabbix Agent
Documentation=man:zabbix_agentd
After=network.target

[Service]
Type=simple
User=zabbix
Group=zabbix
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_agentd --foreground
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now zabbix-agent &> /dev/null
    systemctl is-active zabbix-agent &> /dev/null ||  { ${COLOR}"Zabbix-agent 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix agent安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_agent
}

main

8.安裝主動模式zabbix proxy

[root@centos7-8 src]# grep "^[^#]" zabbix_proxy_active.conf 
ProxyMode=0
Server=127.0.0.1
ServerPort=10051
Hostname=Zabbix proxy
LogFile=/tmp/zabbix_proxy.log
LogFileSize=0
DebugLevel=3
EnableRemoteCommands=1
DBName=zabbix_proxy
DBUser=zabbix
ProxyLocalBuffer=360
ProxyOfflineBuffer=720
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=30
StartPollers=5
StartPollersUnreachable=1
StartTrappers=5
StartPingers=1
StartDiscoverers=1
StartHTTPPollers=1
ListenIP=0.0.0.0
HousekeepingFrequency=1
CacheSize=8M
StartDBSyncers=4
HistoryCacheSize=16M
HistoryIndexCacheSize=4M
Timeout=30
TrapperTimeout=30
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
LogSlowQueries=3000

[root@centos7-8 src]# cat install_zabbix_proxy_active.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-05-28
#FileName:      install_zabbix_proxy_active.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_proxy_active for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_PROXY_CONF=zabbix_proxy_active.conf
ZABBIX_INSTALL_DIR=/apps/zabbix_proxy

DBUSER=proxy
PASSWORD=123456

#數據庫IP地址根據實際情況修改
DBHOST=10.0.0.17

DBNAME=zabbix_proxy_active

#zabbix server ip地址根據實際情況修改
SERVER=10.0.0.7

HOSTNAME=neteagle-proxy-active

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
    OS_RELEASE_VERSION=`lsb_release -rs |awk -F'.' '{print $1}'`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
    if [ ! -e ${ZABBIX_PROXY_CONF} ];then
        ${COLOR}"缺少${ZABBIX_PROXY_CONF}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_zabbix_proxy(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix proxy已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix proxy"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }
    
    ${COLOR}"開始安裝Zabbix proxy依賴包"${END}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        yum -y install gcc gcc-c++ mysql-devel libmysqlclient-dev libxml2-devel net-snmp-devel libevent-devel libcurl-devel libssh2 libssh2-devel java-1.8.0-openjdk-devel
    else
        apt update &> /dev/null;apt -y install libmysqld-dev libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev curl libcurl4-openssl-dev openjdk-8-jdk make &> /dev/null
    fi
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-proxy --enable-agent --enable-java --with-mysql --with-net-snmp --with-libcurl --with-libxml2
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }
    echo "PATH=${ZABBIX_INSTALL_DIR}/sbin:${ZABBIX_INSTALL_DIR}/bin:${PATH}" > /etc/profile.d/zabbix.sh

    ${COLOR}"開始導入數據庫"${END}
    if [[ ${OS_RELEASE_VERSION} == 8 ]] &> /dev/null;then
        yum -y install mysql &> /dev/null
    elif [[ ${OS_RELEASE_VERSION} == 7 ]] &> /dev/null;then 
        yum -y install mariadb &> /dev/null
    else
        apt -y install mysql-client &> /dev/null
    fi 
    cd ${SRC_DIR}/${ZABBIX_DIR}/database/mysql/
    mysql -u${DBUSER} -p${PASSWORD} -h${DBHOST} ${DBNAME} < schema.sql

    cd ${SRC_DIR}
    mv ${ZABBIX_PROXY_CONF} ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    sed -i.bak -e "s/^Server=.*/Server=${SERVER}/" -e "s/^Hostname=.*/Hostname=${HOSTNAME}/" -e "s/^# DBHost=.*/DBHost=${DBHOST}/" -e "s/^DBName=.*/DBName=${DBNAME}/" -e "s/^DBUser=.*/DBUser=${DBUSER}/" -e "s/# DBPassword=/DBPassword=${PASSWORD}/" ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}

    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        TIMEOUTSEC=0
        ENVIRONMENTFILE_DIR=sysconfig
    else
        TIMEOUTSEC=infinity
        ENVIRONMENTFILE_DIR=default
    fi
    cat > /lib/systemd/system/zabbix-proxy.service <<-EOF
[Unit]
Description=Zabbix Proxy
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf"
EnvironmentFile=-/etc/${ENVIRONMENTFILE_DIR}/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_proxy.pid
KillMode=control-group
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_proxy -c \$CONFFILE
ExecStop=/bin/kill -SIGTERM \$MAINPID
RestartSec=10s
TimeoutSec=${TIMEOUTSEC}
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now zabbix-proxy &> /dev/null
    systemctl is-active zabbix-proxy &> /dev/null ||  { ${COLOR}"Zabbix-proxy 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix proxy安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_proxy
}

main

8.安裝主動模式zabbix agent使用proxy

[root@centos7-9 src]# cat install_zabbix_agent_active.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        zhanghui
#QQ:            19661891
#Date:          2021-05-29
#FileName:      install_zabbix_agent_proxy_active.sh
#URL:           www.cnblogs.com/neteagles
#Description:   install_zabbix_agent_proxy_active for centos 7/8 & ubuntu 18.04/20.04
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
SRC_DIR=/usr/local/src
COLOR="echo -e \\033[01;31m"
END='\033[0m'

URL=https://cdn.zabbix.com/zabbix/sources/stable/
VERSION=4.0
ZABBIX_FILE=zabbix-4.0.30.tar.gz
ZABBIX_AGENT_CONF=zabbix_agentd_active.conf
ZABBIX_INSTALL_DIR=/apps/zabbix_agent

#zabbix server ip地址和agent ip地址根據實際情況修改
SERVER=10.0.0.7,10.0.0.77

#agent ip地址根據實際情況修改
SERVERACTIVE=10.0.0.77

HOSTNAME=`ip addr| awk -F" +|/" '/global/{print $3}'`

os(){
    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release;then
        rpm -q redhat-lsb-core &> /dev/null || { ${COLOR}"安裝lsb_release工具"${END};yum -y install  redhat-lsb-core &> /dev/null; }
    fi
    OS_ID=`lsb_release -is`
}

check_file(){
    cd ${SRC_DIR}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        rpm -q wget &> /dev/null || yum -y install wget &> /dev/null
    fi
    if [ ! -e ${ZABBIX_FILE} ];then
        ${COLOR}"缺少${ZABBIX_FILE}文件"${END}
        ${COLOR}'開始下載ZABBIX源碼包'${END}
        wget ${URL}${VERSION}/${ZABBIX_FILE} || { ${COLOR}"Zabbix 源碼下載失敗"${END}; exit; } 
    else
        ${COLOR}"${ZABBIX_FILE}文件已准備好"${END}
    fi
    if [ ! -e ${ZABBIX_AGENT_CONF} ];then
        ${COLOR}"缺少${ZABBIX_AGENT_CONF}文件"${END}
        exit
    else
        ${COLOR}"相關文件已准備好"${END}
    fi
}

install_zabbix_agent(){
    [ -d ${ZABBIX_INSTALL_DIR} ] && { ${COLOR}"Zabbix agent已存在,安裝失敗"${END};exit; }
    ${COLOR}"開始安裝Zabbix agent"${END}
    id zabbix  &> /dev/null || { useradd -s /sbin/nologin -r  zabbix; $COLOR"創建zabbix用戶"$END; }
    
    ${COLOR}"開始安裝Zabbix agent依賴包"${END}
    if [ ${OS_ID} == "CentOS" ] &> /dev/null;then
        yum -y install gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib-devellibevent libevent-devel
    else
        apt update &> /dev/null;apt -y install libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc make &> /dev/null
    fi
    tar xf ${ZABBIX_FILE}
    ZABBIX_DIR=`echo ${ZABBIX_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${ZABBIX_DIR}
    ./configure --prefix=${ZABBIX_INSTALL_DIR} --enable-agent
    make install
    [ $? -eq 0 ] && $COLOR"Zabbix編譯安裝成功"$END ||  { $COLOR"Zabbix編譯安裝失敗,退出!"$END;exit; }
    echo "PATH=${ZABBIX_INSTALL_DIR}/sbin:${ZABBIX_INSTALL_DIR}/bin:${PATH}" > /etc/profile.d/zabbix.sh

    cd ${SRC_DIR}
    mv ${ZABBIX_AGENT_CONF} ${ZABBIX_INSTALL_DIR}/etc/zabbix_proxy.conf
    sed -i.bak -e "s/^Server=.*/Server=${SERVER}/" -e "s/^ServerActive=.*/ServerActive=${SERVERACTIVE}/" -e "s/^Hostname=.*/Hostname=${HOSTNAME}/" ${ZABBIX_INSTALL_DIR}/etc/zabbix_agentd.conf
    chown -R zabbix.zabbix  ${ZABBIX_INSTALL_DIR}

     cat > /lib/systemd/system/zabbix-agent.service <<-EOF
[Unit]                                                                                                                 
Description=Zabbix Agent
Documentation=man:zabbix_agentd
After=network.target

[Service]
Type=simple
User=zabbix
Group=zabbix
ExecStart=${ZABBIX_INSTALL_DIR}/sbin/zabbix_agentd --foreground
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now zabbix-agent &> /dev/null
    systemctl is-active zabbix-agent &> /dev/null ||  { ${COLOR}"Zabbix-agent 啟動失敗,退出!"${END} ; exit; }
    ${COLOR}"Zabbix agent安裝完成"${END}
}

main(){
    os
    check_file
    install_zabbix_agent
}

main


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM