目录

一、Zabbix 核心介绍

1. 核心特性

2.核心组件(架构)

二、Zabbix 部署

步骤 1:系统初始化

步骤 2:服务器上部署zabbix-server

步骤 3:系统安装中文语言包

步骤 4:Web 界面初始化

步骤 5:添加被监控主机(Agent 方式)

三、通用脚本安装

1.监控端服务安装

2.被监控端服务安装


一、Zabbix 核心介绍

        Zabbix 是一款开源、企业级、分布式监控系统,用于实时监控网络设备、服务器、虚拟机、数据库、应用服务及云资源的性能、可用性与故障,支持数据采集、告警、可视化、自动化运维,是运维领域最主流的监控方案之一。

1. 核心特性

开源免费:基于 GPL 协议,无授权费用,社区活跃、文档完善;
多维度监控:支持 CPU、内存、磁盘、网络、进程、端口、日志、SNMP、IPMI、JMX、HTTP/HTTPS、数据库(MySQL、PostgreSQL、Oracle)、云平台(AWS、阿里云、腾讯云)等;
分布式架构:Server + Proxy + Agent 三层,Proxy 实现跨区域 / 跨网络数据汇聚,减轻 Server 压力,支持大规模集群(上万台主机);
灵活告警:支持邮件、短信、企业微信、钉钉、飞书、电话、Webhook 等多渠道,可自定义告警阈值、升级策略、静默规则;
可视化:内置 Grafana 集成、自定义仪表盘、图表、拓扑图,支持数据导出与报表;
自动发现:自动扫描网络、发现主机 / 接口 / 服务,自动添加监控项,降低运维成本;
数据存储:支持 MySQL、PostgreSQL、TimescaleDB、Elasticsearch,历史数据可分区 / 压缩,支持长期存储;
自动化:支持远程命令执行、配置下发、故障自愈(如重启服务、清理磁盘)。

2.核心组件(架构)

Zabbix Server:核心服务,负责数据接收、处理、存储、告警计算、配置管理,是整个系统的大脑;
Zabbix Agent:部署在被监控主机(Linux/Windows),主动采集本地指标(CPU、内存等),被动接收 Server 指令,轻量高效;
Zabbix Proxy:可选组件,用于分布式场景,代理 Agent 数据上报、缓存数据,解决跨网络 / 跨地域监控,减轻 Server 负载;
Zabbix Web:基于 PHP 的 Web 管理界面,用于配置、查看监控、管理告警、生成报表;
Database:存储配置、历史数据、事件、告警信息(主流 MySQL);
Zabbix Sender:命令行工具,用于主动推送自定义数据到 Server;
Zabbix Get:命令行工具,用于测试从 Agent 获取数据。

二、Zabbix 部署

环境准备

操作系统:ubuntu 22.04
zabbix-server版本:7.0LTS
架构:LNMP

步骤 1:系统初始化

# 关闭防火墙
ufw disable

步骤 2:服务器上部署zabbix-server

2.1 安装Zabbix软件库 安装Zabbix的官方软件库(替换为阿里源)

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb --no-check-certificate
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
sed -i 's/https:\/\/repo.zabbix.com/https:\/\/mirrors.aliyun.com\/zabbix/'  /etc/apt/sources.list.d/zabbix.list
apt update

2.2 安装Zabbix Server + Web + Agent

apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent -y

2.3 安装mariadb数据库

apt install mariadb-server -y
systemctl enable  --now mariadb

    2.4 创建并初始化数据库

    # 登录数据库并创建Zabbix专属库和用户
    mysql -u root -p
    # 输入上面设置的root密码,进入数据库命令行后执行以下SQL
    create database zabbix character set utf8mb4 collate utf8mb4_bin;
    create user 'zabbix'@'localhost' identified by 'Zabbix@123';
    grant all privileges on zabbix.* to 'zabbix'@'localhost';
    flush privileges;
    exit;
    
    
    #在Zabbix服务器主机上导入初始数据
    zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p'Zabbix@123' zabbix

    2.5 配置 Zabbix Server

    vi /etc/zabbix/zabbix_server.conf
    # 修改以下参数(取消注释并修改)
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=Zabbix@123  # 与创建的数据库密码一致
    # 保存退出

    2.6 配置 PHP 参数(适配 Zabbix)

    #请使用下面命令完成
    sed -i '2,3s/^# //' /etc/zabbix/nginx.conf
    sed -i 's/8080/8088/g'  /etc/zabbix/nginx.conf
    sed -i 's/example.com/localhost/g'  /etc/zabbix/nginx.conf
    sed -i '21,71s/^/#/'  /etc/nginx/sites-enabled/default

    2.7 启动 Zabbix 服务并开机自启

    systemctl restart mariadb zabbix-server zabbix-agent nginx php8.1-fpm
    systemctl enable mariadb  zabbix-server zabbix-agent nginx php8.1-fpm

    步骤 3:系统安装中文语言包

    #安装中文语言包
    sudo apt install language-pack-zh-hans
    #配置系统语言
    sudo update-locale LANG=zh_CN.UTF-8
    
    #重启
    reboot

    步骤 4:Web 界面初始化

    1.访问:http://服务器IP:8088
    2.欢迎页 → 下一步
    3.检查依赖(确保所有项为 OK,否则补装缺失 PHP 扩展)→ 下一步
    4.配置数据库连接:

    • 数据库类型:MySQL
    • 数据库主机:localhost
    • 数据库端口:3306
    • 数据库名称:zabbix
    • 用户:zabbix
    • 密码:Zabbix123
    • → 下一步

    5.Zabbix Server 详情(默认即可)→ 下一步
    6.预安装检查 → 下一步
    7.完成初始化
    8.登录:默认账号 Admin,密码 zabbix(首次登录建议修改)

    步骤 5:添加被监控主机(Agent 方式)

    5.1 被监控端安装 Zabbix Agent(Linux)

    1.安装Zabbix Agent(同Server端源)
    # Centos系统
    rpm -Uvh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/7.0/rhel/$VER/x86_64/zabbix-release-7.0-1.el$VER.noarch.rpm
    dnf clean all >/dev/null 2>&1 || yum clean all >/dev/null 2>&1
    dnf install -y zabbix-agent2
    
    # Ubuntu系统
    wget https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+$(lsb_release -cs)_all.deb
    dpkg -i zabbix-release_7.0-1+ubuntu${VERSION_ID}_all.deb
    apt update -y
    apt install -y zabbix-agent2
    
    2.编辑配置文件(vim /etc/zabbix/zabbix_agentd.conf)
    # 被动模式:允许Zabbix Server/Proxy IP访问(必填)
    Server=192.168.1.100  # 替换为你的Zabbix Server IP
    # 主动模式:Agent主动上报数据的Server IP(建议配置)
    ServerActive=192.168.1.100
    # 主机名,必须与Web界面添加的Host name完全一致(必填)
    Hostname=web-server-01
    # 监听端口(默认10050,被动模式用)
    ListenPort=10050
    # 开启被动模式(默认3,0=关闭被动仅主动)
    StartAgents=3
    
    3.启动 Agent 并开机自启
    systemctl start zabbix-agent
    systemctl enable zabbix-agent

    5.2 Web 界面添加主机

    1. 登录Zabbix Web界面(Admin/zabbix)
    2. 进入【配置】→【主机】→【创建主机】
    3. 基本信息配置:

    • 主机名称:与Agent配置文件中Hostname一致(Web-Server-01)
    • 可见名称:自定义(如“北京机房-Web服务器01”)
    • 群组:选择“Linux servers”(或自定义群组)

    4. 接口配置:

    1. 类型:Zabbix agent
    2. IP地址:被控端实际IP(如192.168.1.101)
    3. 端口:10050(默认)

    5. 模板关联:

    • 点击【模板】→【选择】,搜索“Template OS Linux by Zabbix agent”
    • 选中模板后点击“添加”,关联基础监控项(CPU、内存、磁盘等)

    6. 点击页面底部【添加】,完成主机添加
    7. 验证:进入【监测】→【最新数据】,选择被控端主机,能看到数据则部署成功

    三、通用脚本安装

    1.监控端服务安装

    #!/bin/bash
    #==================================================================
    # Install Zabbix 7.0 LTS on CentOS, Rocky Linux, Debian, or Ubuntu
    #==================================================================
     
     
    MYSQL_ZABBIX_USER=zabbix
    MYSQL_ZABBIX_PASS=Zabbix@123
    MYSQL_ROOT_PASSWORD=Asdf1234!
    ZABBIX_VER=7.0
    # 修复:修改为可用的 MariaDB 版本 11.4
    MARIADB_VER=11.4
    USE_NGINX=true
    DATABASE=mariadb
     
     
    echo -e "\e[32m------------------------------------------------------------------------"
    echo -e "\e[32m                                                                      "
    echo -e "\e[32m                        Zabbix 7.0 LTS 一键安装脚本                    "
    echo -e "\e[32m                                                                      "
    echo -e "\e[32m    centos 9 / rockylinux 9 / ubuntu 22 / debian 12                   "
    echo -e "\e[32m                                                                      "
    echo -e "\e[32m------------------------------------------------------------------------\e[0m"
     
     
    # 检查当前用户是否是root用户
    if [ "$(id -u)" -ne 0 ]; then
      echo "请使用root用户运行本脚本..."
      exit 1
    fi
     
    install_zabbix_release_on_centos_or_rocky() {
        # echo -e "\e[32m为CentOS或Rocky Linux安装zabbix源...\e[0m"
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                      "
        echo -e "\e[32m             为CentOS或Rocky Linux安装zabbix源...                       "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        dnf -y install epel-release
        VERSION_ID=$(echo "$VERSION_ID" | cut -d'.' -f1)
        if [ "$VERSION_ID" == "9" ]; then
            #  https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-2.el9.noarch.rpm
            curl -O https://mirrors.aliyun.com/zabbix/zabbix/7.0/${ID}/${VERSION_ID}/x86_64/zabbix-release-7.0-2.el${VERSION_ID}.noarch.rpm
            rpm -ivh zabbix-release-7.0-2.el${VERSION_ID}.noarch.rpm
        elif [ "$VERSION_ID" == "8" ]; then
            curl -O https://mirrors.aliyun.com/zabbix/zabbix/7.0/${ID}/${VERSION_ID}/x86_64/zabbix-release-7.0-1.el${VERSION_ID}.noarch.rpm
            rpm -ivh zabbix-release-7.0-1.el${VERSION_ID}.noarch.rpm
        else
            echo -e "\e[91m不支持的操作系统版本,脚本停止运行。\e[0m"
            exit 1
        fi
        sed -i 's/repo\.zabbix\.com/mirrors\.aliyun\.com\/zabbix/' /etc/yum.repos.d/zabbix.repo
        sed -i 's/repo\.zabbix\.com/mirrors\.aliyun\.com\/zabbix/' /etc/yum.repos.d/zabbix-agent2-plugins.repo > /dev/null 2>&1
        sed -i '/^\[epel\]/a excludepkgs=zabbix*' /etc/yum.repos.d/epel.repo
        dnf makecache
        
        if [ "$USE_NGINX" == "true" ]; then
            echo -e "\n\e[32m使用nginx\n\e[0m"
            dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent langpacks-zh_CN
        else    
            echo -e "\n\e[32m使用apache\n\e[0m"
            dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent langpacks-zh_CN
        fi
        # 安装glibc-common实现对语言包的识别
        dnf -y install glibc-common
        [ $? -ne 0 ] && echo -e "\e[91m安装zabbix失败,请检查错误信息.\e[0m" && exit 1
    }
     
    config_rocky(){
        # echo '为Rocky Linux配置阿里云源...'
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                     为Rocky Linux配置阿里云源...                        "
        echo -e "\e[32m                                                                        "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        for file in /etc/yum.repos.d/rocky-*.repo /etc/yum.repos.d/Rocky-*.repo; do
            [ -e "$file" ] && cp "$file" "$file.bak" && sed -i -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/\$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' "$file"
        done
        dnf module reset mariadb -y
    }
     
    config_firewalld_on_centos_or_rocky() {
        # echo -e "\e[32m为CentOS或Rocky Linux配置防火墙...\e[0m"
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                 为CentOS或Rocky Linux配置防火墙...                      "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        # 如果防火墙正在运行,配置防火墙
        if systemctl status firewalld | grep -q "active (running)"; then
            echo '配置防火墙...'
            firewall-cmd --permanent --add-port={80/tcp,10051/tcp,443/tcp}
            firewall-cmd --reload
        fi
        # 关闭selinux
        sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
        setenforce 0
    }
     
    config_ufw_on_ubuntu_or_debian() {
        # echo -e "\e[32m为Ubuntu或Debian配置防火墙...\e[0m"
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                     为Ubuntu或Debian配置防火墙...                       "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        if command -v ufw &>/dev/null; then
            echo "ufw已安装在系统中."
     
            # 检查ufw是否已启用
            if ufw status | grep -q "Status: active"; then
            echo "ufw已启用,配置防火墙..."
            ufw allow 80/tcp
            ufw allow 443/tcp
            ufw allow 10051/tcp
            ufw reload
            else
                echo "ufw未启用."
            fi
        else
            echo "ufw未安装在系统中."
        fi
    }
     
    install_zabbix_release_on_debian() {
        # echo -e "\e[32m为Debian安装zabbix源...\e[0m"
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                       为Debian安装zabbix源...                          "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        apt install curl wget -y
     
        if [ "$VERSION_ID" == "12" ]; then
            # https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
            curl -O https://mirrors.aliyun.com/zabbix/zabbix/7.0/${ID}/pool/main/z/zabbix-release/zabbix-release_7.0-1+${ID}${VERSION_ID}_all.deb
            dpkg -i "zabbix-release_7.0-1+${ID}${VERSION_ID}_all.deb"
        else
            echo -e "\e[91m不支持的系统版本,脚本停止运行.\e[0m"
            exit 1
        fi
        sed -i 's/repo\.zabbix\.com/mirrors\.aliyun\.com\/zabbix/' /etc/apt/sources.list.d/zabbix.list
        apt update -y
     
        if [ "$USE_NGINX" == "true" ];then
            echo -e "\n\e[32m使用nginx\n\e[0m"
            apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
            sed -i '/^\s*include \/etc\/nginx\/sites-enabled\// s/^/#/' /etc/nginx/nginx.conf
            # [可选]开启80端口
            sed -i 's/^#\( \+\)listen\( \+\)8080;/\1listen\280;/' /etc/nginx/conf.d/zabbix.conf
        else
            echo -e "\n\e[32m使用apache\n\e[0m"
            apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
        fi
        [ $? -ne 0 ] && echo -e "\e[91m安装zabbix失败,请检查错误信息.\e[0m" && exit 1
    }
     
    install_zabbix_release_on_ubuntu() {
        # echo -e "\e[32m为Ubuntu安装zabbix源...\e[0m"
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                       为Ubuntu安装zabbix源...                          "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        apt install -y curl wget
        VERSION_ID_BIG=$(echo "$VERSION_ID" | cut -d'.' -f1)
        if ( [ "$VERSION_ID_BIG" == "22" ] || [ "$VERSION_ID_BIG" == "24" ] ); then
            # https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
            # https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu24.04_all.deb
            curl -O https://mirrors.aliyun.com/zabbix/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu${VERSION_ID}_all.deb
            dpkg -i zabbix-release_7.0-1+ubuntu${VERSION_ID}_all.deb
        else
            echo -e "\e[91m不支持的操作系统版本,脚本停止运行。\e[0m"
            exit 1
        fi
     
        sed -i 's/repo\.zabbix\.com/mirrors\.aliyun\.com\/zabbix/' /etc/apt/sources.list.d/zabbix.list
        sed -i 's/repo\.zabbix\.com/mirrors\.aliyun\.com\/zabbix/' /etc/apt/sources.list.d/zabbix-agent2-plugins.list > /dev/null 2>&1
        apt update -y
        if [ "$USE_NGINX" == "true" ]; then
            echo -e "\n\e[32m使用nginx\n\e[0m"
            apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent language-pack-zh-hans
            sed -i '/^\s*include \/etc\/nginx\/sites-enabled\// s/^/#/' /etc/nginx/nginx.conf
            # [可选]开启80端口
            sed -i 's/^#\( \+\)listen\( \+\)8080;/\1listen\280;/' /etc/nginx/conf.d/zabbix.conf
        else
            echo -e "\n\e[32m使用apache\n\e[0m"
            apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent language-pack-zh-hans
        fi
        [ $? -ne 0 ] && echo -e "\e[91m安装zabbix失败,请检查错误信息.\e[0m" && exit 1
    }
     
    install_mariadb_centos() {
        # echo -e "\e[32m安装mariadb源...\e[0m"
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                            安装mariadb源...                            "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        cat > /etc/yum.repos.d/mariadb.repo <<EOF
    [mariadb]
    name = MariaDB
    baseurl = https://mirrors.aliyun.com/mariadb/yum/${MARIADB_VER}/rhel/\$releasever/\$basearch
    gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
    gpgcheck = 1
    EOF
        dnf install -y MariaDB-server MariaDB-client MariaDB-backup MariaDB-devel
        systemctl enable mariadb --now
        if systemctl is-active mariadb; then
            echo -e "\e[32mMariaDB 安装成功\e[0m"
        else
            echo -e "\e[91mMariaDB 安装失败\e[0m"
            exit 1
        fi
    }
     
    install_mariadb_debian(){
        # echo -e "\e[32m安装mariadb源...\e[0m"
        echo -e "\e[32m------------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                            安装mariadb源...                            "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m------------------------------------------------------------------------\e[0m"
        apt-get install -y apt-transport-https curl
        VERSION_ID_BIG=$(echo "$VERSION_ID" | cut -d'.' -f1)
        if [ "$VERSION_ID_BIG" == "24" ]; then
            apt install -y mariadb-server mariadb-client
        else 
            mkdir -p /etc/apt/keyrings
            curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'
     
            cat > /etc/apt/sources.list.d/mariadb.sources <<EOF
    # MariaDB ${MARIADB_VER} repository list
    X-Repolib-Name: MariaDB
    Types: deb
    URIs: https://mirrors.aliyun.com/mariadb/repo/${MARIADB_VER}/$ID
    Suites: ${VERSION_CODENAME}
    Components: main
    Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp
    EOF
            apt update
            apt install -y mariadb-server mariadb-client
        fi
        systemctl enable mariadb --now
        if systemctl is-active mariadb; then
            echo -e "\e[32mMariaDB 安装成功\e[0m"
        else
            echo -e "\e[91mMariaDB 安装失败\e[0m"
            exit 1
        fi
    }
     
    init_database() {
        # echo -e "\e[32m初始化数据库...\e[0m"
        echo -e "\e[32m-----------------------------------------------------------------------"
        echo -e "\e[32m                                                                      "
        echo -e "\e[32m                          初始化数据库...                               "
        echo -e "\e[32m                                                                      "
        echo -e "\e[32m-----------------------------------------------------------------------\e[0m"
        if [ "$DATABASE" == "mariadb" ]; then
            SQL_EXEC=mariadb
        else
            SQL_EXEC=mysql
        fi
        ${SQL_EXEC} -uroot -s mysql <<EOF
    create database zabbix character set utf8mb4 collate utf8mb4_bin;
    CREATE USER ${MYSQL_ZABBIX_USER}@'localhost' IDENTIFIED BY "${MYSQL_ZABBIX_PASS}";
    GRANT ALL PRIVILEGES on zabbix.* TO ${MYSQL_ZABBIX_USER}@'localhost';
    set global log_bin_trust_function_creators = 1;
    FLUSH PRIVILEGES;
    EOF
        # echo -e "\e[32m导入初始化数据...\e[0m"
        echo -e "\e[32m-----------------------------------------------------------------------"
        echo -e "\e[32m                                                                      "
        echo -e "\e[32m                         导入初始化数据...                              "
        echo -e "\e[32m                                                                      "
        echo -e "\e[32m-----------------------------------------------------------------------\e[0m"
        zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | ${SQL_EXEC} --default-character-set=utf8mb4 -u${MYSQL_ZABBIX_USER} -p${MYSQL_ZABBIX_PASS} zabbix
        sed -i "s/# DBPassword=/DBPassword=${MYSQL_ZABBIX_PASS}/g" /etc/zabbix/zabbix_server.conf
        echo "set global log_bin_trust_function_creators = 0;" | ${SQL_EXEC} -uroot
        # 修改root密码
        ${SQL_EXEC} -uroot -s mysql <<EOF
    ALTER USER 'root'@'localhost' IDENTIFIED BY "${MYSQL_ROOT_PASSWORD}";
    FLUSH PRIVILEGES;
    EOF
    }
     
    centos_or_rocky_finsh() {
        # echo -e "\e[32m安装完成,启动服务...\e[0m"
        echo -e "\e[32m-----------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                       安装完成,启动服务...                               "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m-----------------------------------------------------------------------\e[0m"
        if [ "$USE_NGINX" == "true" ]; then
            # 重启服务nginx
            echo -e "\e[32m重启服务nginx\e[0m"
            systemctl restart zabbix-server zabbix-agent nginx php-fpm
            systemctl enable zabbix-server zabbix-agent nginx php-fpm
        else
            # 启动服务apahce
            echo -e "\e[32m重启服务apahce\e[0m"
            systemctl restart zabbix-server zabbix-agent httpd php-fpm
            systemctl enable zabbix-server zabbix-agent httpd php-fpm
        fi
        notification
    }
     
    ubuntu_or_debian_finsh() {
        # echo -e "\e[32m安装完成,启动服务...\e[0m"
        echo -e "\e[32m-----------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m                       安装完成,启动服务...                               "
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m-----------------------------------------------------------------------\e[0m"
        if [ "$USE_NGINX" == "true" ]; then
            echo -e "\e[32m重启服务nginx\e[0m"
            php_fpm=$(systemctl list-unit-files | grep 'php.*-fpm\.service' | awk '{print $1}')
            systemctl disable apache2 > /dev/null 2>&1
            systemctl stop apache2 > /dev/null 2>&1
            systemctl daemon-reload
            systemctl restart zabbix-server zabbix-agent nginx ${php_fpm}
            systemctl enable zabbix-server zabbix-agent nginx ${php_fpm}
        else
            echo -e "\e[32m重启服务apahce\e[0m"
            systemctl restart zabbix-server apache2 zabbix-agent
            systemctl enable zabbix-server apache2 zabbix-agent
        fi
        notification
    }
     
    change_font_to_chinese() {
        # echo -e "\e[32m解决zabbix图表中文乱码问题\e[0m"
        echo -e "\e[32m-----------------------------------------------------------------------"
        echo -e "\e[32m                                                                      "
        echo -e "\e[32m                     解决zabbix图表中文乱码问题                           "
        echo -e "\e[32m                                                                      "
        echo -e "\e[32m-----------------------------------------------------------------------\e[0m"
        wget -P /usr/share/zabbix/assets/fonts https://www.xxshell.com/download/sh/zabbix/ttf/simkai.ttf
        cd /usr/share/zabbix/assets/fonts/
        if [ -e "simkai.ttf" ]; then
            mv graphfont.ttf graphfont.ttf.bak
            mv simkai.ttf graphfont.ttf
        else
            echo -e "\e[31m中文字体simkai.ttf不存在,请重新下载!\e[0m"
        fi
     
    }
     
    notification() {
        echo
        # echo -e "\e[32m全部安装完成\e[0m"
        # echo -e "\e[31m数据库 root 用户初始密码:${MYSQL_ROOT_PASSWORD}\e[0m"
        # echo -e "\e[31m数据库 zabbix 用户初始密码:${MYSQL_ZABBIX_PASS}\e[0m"
        echo -e "\e[32m-----------------------------------------------------------------------"
        echo -e "\e[32m                                                                       "
        echo -e "\e[32m   全部安装完成                                                        "
        echo -e "\n\e[32m   数据库 root 用户初始密码:${MYSQL_ROOT_PASSWORD}                   "
        echo -e "\n\e[32m   数据库 zabbix 用户初始密码:${MYSQL_ZABBIX_PASS}                   "
        echo -e "\e[32m                                                                        "
        echo -e "\e[32m-----------------------------------------------------------------------\e[0m"
     
        # 获取ip
        if command -v ip &> /dev/null; then
            # 使用ip命令获取IP地址并存储到ip变量
            ip=$(ip addr | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 | grep -v "^127.")
        else
            # 使用ifconfig命令获取IP地址并存储到ip变量
            ip=$(ifconfig | grep -oP 'inet\s+\K[\d.]+' | grep -v "^127.")
        fi
     
        # 使用for循环打印IP地址,并在每次打印后输出 "ok"
        # echo -e "\e[32m访问继续下一步操作:\e[0m"
        echo -e "\e[32m-----------------------------------------------------------------------"
        echo -e "\e[32m"
        echo -e "\e[32m   访问 WEB 继续下一步操作:"
        for i in $ip; do
            if [ "$USE_NGINX" == "true" ]; then
                # echo -e "\e[32m使用Nginx,访问: http://$i\e[0m"
                echo -e "\n\e[32m   使用Nginx,访问: http://$i "
            else
                # echo -e "\e[32m使用Apache,访问: http://$i/zabbix\e[0m"
                echo -e "\n\e[32m   使用Apache,访问: http://$i/zabbix " 
            fi
        done
        # echo -e "\e[32m网页登陆,用户名密码:  Admin / zabbix\e[0m"
        echo -e "\n\e[32m   网页登陆,用户名密码:  Admin / zabbix  "
        echo -e "\n\e[32m-----------------------------------------------------------------------\e[0m"
     
        if [ "$ID" == "debian" ]; then
            echo -e "\n\e[31m请手动执行 dpkg-reconfigure locales 安装中文语言包!!!\e[0m"
            echo -e "\e[31m执行后勾选 zh_CN.UTF-8!!!\e[0m"
            echo -e "\e[31m安装结束后,重启服务: \e[0m"
            echo -e "\e[31msystemctl restart apache2 or systemctl restart nginx php*-fpm.service\e[0m"
        fi
    }
     
    main() {
        # 获取操作系统信息
        if [ -f /etc/os-release ]; then
            . /etc/os-release
            echo -e "\e[32m操作系统版本为: $ID linux ${VERSION_ID}\e[0m"
            case "$ID" in
                centos|rocky)
                # CentOS 或 Rocky Linux 的安装步骤
                VERSION_ID=$(echo "$VERSION_ID" | cut -d'.' -f1)
                if ( [ "$VERSION_ID" == "8" ] || [ "$VERSION_ID" == "9" ]); then
                    install_zabbix_release_on_centos_or_rocky
                    install_mariadb_centos
                    change_font_to_chinese
                    init_database
                    config_firewalld_on_centos_or_rocky
                    centos_or_rocky_finsh
                else
                    echo -e "\e[91m不支持的操作系统版本,脚本停止运行。\e[0m"
                    exit 1
                fi
                ;;
                debian|ubuntu)
                # Debian 或 Ubuntu 的安装步骤
     
                if [ "$ID" == "debian" ]; then
                    install_zabbix_release_on_debian
                elif [ "$ID" == "ubuntu" ]; then
                    install_zabbix_release_on_ubuntu
                    apt -y install language-pack-zh-hans
                else
                    echo -e "\e[91m不支持的操作系统版本,脚本停止运行。\e[0m"
                    exit 1
                fi
                install_mariadb_debian
                change_font_to_chinese
                init_database
                config_ufw_on_ubuntu_or_debian
                ubuntu_or_debian_finsh
                ;;
            esac
        fi
    }
     
     
    # 主函数
    main

    2.被监控端服务安装

    #!/bin/bash
    # Zabbix 7.0 Agent2 被监控端自动安装脚本
    # 适用:CentOS/RHEL/Ubuntu/Debian
    # 使用方法:chmod +x zabbix_agent2_install.sh && ./zabbix_agent2_install.sh
    
    # ====================== 配置项(请修改) ======================
    # ZABBIX服务端IP地址(必填)
    ZABBIX_SERVER="192.168.1.100"
    # 本机主机名(建议和Zabbix前端添加的主机名一致,留空则自动获取本机hostname)
    AGENT_HOSTNAME=""
    # ==============================================================
    
    # 自动获取本机主机名
    if [ -z "$AGENT_HOSTNAME" ]; then
        AGENT_HOSTNAME=$(hostname)
    fi
    
    echo "============================================="
    echo "Zabbix 7.0 Agent2 自动安装脚本"
    echo "服务端IP: $ZABBIX_SERVER"
    echo "本机主机名: $AGENT_HOSTNAME"
    echo "============================================="
    
    # 检查root权限
    if [ $UID -ne 0 ]; then
        echo "错误:请使用root权限运行脚本!"
        exit 1
    fi
    
    # 识别系统类型
    if [ -f /etc/redhat-release ]; then
        OS="rhel"
        OS_VER=$(rpm -E %rhel)
    elif [ -f /etc/lsb-release ]; then
        OS="debian"
        . /etc/lsb-release
        DISTRO=$DISTRIB_CODENAME
    elif [ -f /etc/debian_version ]; then
        OS="debian"
        DISTRO=$(cat /etc/debian_version | cut -d'.' -f1)
        case $DISTRO in
            10) DISTRO="buster" ;;
            11) DISTRO="bullseye" ;;
            12) DISTRO="bookworm" ;;
            *) echo "不支持的Debian版本"; exit 1 ;;
        esac
    else
        echo "不支持的操作系统!"
        exit 1
    fi
    
    # 安装Zabbix 7.0官方源
    echo "正在配置Zabbix 7.0官方源..."
    if [ "$OS" = "rhel" ]; then
        rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/${OS_VER}/x86_64/zabbix-release-7.0-1.el${OS_VER}.noarch.rpm
        # 清空并生成yum缓存
        yum clean all && yum makecache
        # 安装Agent2
        yum install -y zabbix-agent2 zabbix-agent2-plugin-*
    else
        # 安装依赖
        apt update && apt install -y wget gnupg2
        # 添加Zabbix GPG密钥
        wget -O - https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb | dpkg -i
        # 更新源
        apt update
        # 安装Agent2
        apt install -y zabbix-agent2 zabbix-agent2-plugin-*
    fi
    
    # 备份原始配置文件
    echo "正在备份原始配置文件..."
    cp /etc/zabbix/zabbix_agent2.conf /etc/zabbix/zabbix_agent2.conf.bak
    
    # 自动修改配置文件
    echo "正在配置Agent2..."
    sed -i "s/^Server=127.0.0.1/Server=$ZABBIX_SERVER/g" /etc/zabbix/zabbix_agent2.conf
    sed -i "s/^ServerActive=127.0.0.1/ServerActive=$ZABBIX_SERVER/g" /etc/zabbix/zabbix_agent2.conf
    sed -i "s/^Hostname=.*$/Hostname=$AGENT_HOSTNAME/g" /etc/zabbix/zabbix_agent2.conf
    
    # 开启防火墙端口(10050)
    echo "正在配置防火墙放行10050端口..."
    if systemctl status firewalld >/dev/null 2>&1; then
        firewall-cmd --permanent --add-port=10050/tcp
        firewall-cmd --reload
    elif command -v ufw >/dev/null 2>&1; then
        ufw allow 10050/tcp
        ufw reload
    fi
    
    # 启动并设置开机自启
    echo "正在启动Zabbix Agent2并设置开机自启..."
    systemctl restart zabbix-agent2
    systemctl enable zabbix-agent2
    
    # 检查运行状态
    echo "============================================="
    echo "安装完成!检查Agent2状态:"
    systemctl status zabbix-agent2 --no-pager
    
    echo "============================================="
    echo "✅ Zabbix 7.0 Agent2 安装配置完成!"
    echo "服务端IP:$ZABBIX_SERVER"
    echo "本机主机名:$AGENT_HOSTNAME"
    echo "监听端口:10050"
    echo "============================================="
    Logo

    AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

    更多推荐