当前位置: 首页 > news >正文

2025年总结zabbix手动部署过程!

1.下载软件包。


wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_6.0+ubuntu22.04_all.deb
dpkg -i zabbix-release_latest_6.0+ubuntu22.04_all.deb
apt update
apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent


2 准备数据库和用户


mysql -uroot
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;


3 初绐化数据库的表


zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 zabbix
修改Zabbix Server 连接MySQL
vim /etc/zabbix/zabbix_server.conf
DBPassword=123456


4 修改PHP配置


vim /etc/zabbix/apache.conf
php_value date.timezone Asia/Shanghai
systemctl restart zabbix-server zabbix-agent apache2
浏览器访问
http://10.0.0.102/zabbix

5.总结zabbix主动模式和被动模式简介及实现


被动模式(Passive Mode):
由 Zabbix Server 向 Agent 请求监控数据。
特点:服务端主动请求,适用于网络稳定的环境。
主动模式(Active Mode):
Zabbix Agent 主动向 Zabbix Server 推送监控数据。
特点:减少服务端负载,适用于客户端频繁离线的环境。

6 总结zabbix proxy主动及被动案例

7 .总结自定义监控,监控win, nginx, 并基于短信/微信报警。

8.完成1键安装zabbix agent脚本,可以用于ubuntu系统。

#!/bin/bash
ZABBIX_SERVER=zabbix.yu.org
ZABBIX_MAJOR_VER=6.0
ZABBIX_VER=${ZABBIX_MAJOR_VER}-4

URL="mirror.tuna.tsinghua.edu.cn/zabbix"
ZABBIX_HOSTNAME=web-`hostname -I`
. /etc/os-release


color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo 
}

install_zabbix_agent () {
    if [ $ID = "centos" -o $ID = "rocky" ];then
	     VERSION_ID=`echo $VERSION_ID|awk -F. '{print $1}'` 
		 wget https://$URL/zabbix/${ZABBIX_MAJOR_VER}/rhel/${VERSION_ID}/x86_64/zabbix-release-${ZABBIX_VER}.el${VERSION_ID}.noarch.rpm
         rpm -Uvh zabbix-release-${ZABBIX_VER}.el${VERSION_ID}.noarch.rpm
        if [ $? -eq 0 ];then
            color "YUM仓库准备完成" 0
        else
            color "YUM仓库配置失败,退出" 1
            exit
        fi
        sed -i "s#repo.zabbix.com#${URL}#" /etc/yum.repos.d/zabbix.repo
        yum -y install zabbix-agent || { color "YUM安装失败,退出" 1; exit; } 
    else 
        wget https://$URL/zabbix/${ZABBIX_MAJOR_VER}/ubuntu/pool/main/z/zabbix-release/zabbix-release_${ZABBIX_VER}+ubuntu${VERSION_ID}_all.deb
        if [ $? -eq 0 ];then
            color "APT仓库准备完成" 0
        else
            color "APT仓库配置失败,退出" 1
            exit
        fi
        dpkg -i zabbix-release_${ZABBIX_VER}+ubuntu${VERSION_ID}_all.deb
        sed -i "s#repo.zabbix.com#${URL}#"   /etc/apt/sources.list.d/zabbix.list
        apt update
        apt -y install zabbix-agent
    fi
}

config_zabbix_agent (){ 
    sed -i  "/^Server=127.0.0.1/c Server=$ZABBIX_SERVER"  /etc/zabbix/zabbix_agentd.conf
    #sed -i -e "/^Server=127.0.0.1/c Server=$ZABBIX_SERVER"  -e "/^Hostname=Zabbix server/c Hostname=${ZABBIX_HOSTNAME}"  /etc/zabbix/zabbix_agentd.conf
}

start_zabbix_agent () {
    systemctl enable zabbix-agent.service
    systemctl restart zabbix-agent.service
    systemctl is-active zabbix-agent.service
    if [ $?  -eq 0 ];then  
        echo "-------------------------------------------------------------------"
        color "Zabbix Agent 安装完成!" 0
    else
        color "Zabbix Agent 安装失败" 1
        exit
    fi
}

install_zabbix_agent

config_zabbix_agent

start_zabbix_agent

6.完成1键脚本,可以基于zabbix api添加zabbix agent到zabbix web。


#!/bin/bash

# 配置 Zabbix API 连接信息
ZABBIX_URL="http://zabbix.example.com/zabbix/api_jsonrpc.php"  
ZABBIX_USER="Admin"  
ZABBIX_PASSWORD="zabbix"  

# 配置主机信息
HOSTNAME="zabbix-agent-host"  
HOST_IP="192.168.0.100"  
GROUP_NAME="Linux servers"  
TEMPLATE_NAME="Template OS Linux by Zabbix agent"  

# 检查依赖
if ! command -v jq &>/dev/null; then
    echo "[ERROR] jq 未安装,请安装后重试。"
    exit 1
fi

# 登录获取 Token
get_auth_token() {
    local payload
    payload=$(cat <<EOF
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "$ZABBIX_USER",
        "password": "$ZABBIX_PASSWORD"
    },
    "id": 1
}
EOF
)
    curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result'
}

# 获取主机组 ID,如果不存在则创建
get_group_id() {
    local group_name=$1
    local auth_token=$2

    local payload
    payload=$(cat <<EOF
{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "filter": {
            "name": "$group_name"
        }
    },
    "auth": "$auth_token",
    "id": 1
}
EOF
)
    local group_id
    group_id=$(curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result[0].groupid')

    if [ "$group_id" = "null" ]; then
        payload=$(cat <<EOF
{
    "jsonrpc": "2.0",
    "method": "hostgroup.create",
    "params": {
        "name": "$group_name"
    },
    "auth": "$auth_token",
    "id": 1
}
EOF
)
        group_id=$(curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result.groupids[0]')
    fi
    echo "$group_id"
}

# 获取模板 ID
get_template_id() {
    local template_name=$1
    local auth_token=$2

    local payload
    payload=$(cat <<EOF
{
    "jsonrpc": "2.0",
    "method": "template.get",
    "params": {
        "filter": {
            "host": "$template_name"
        }
    },
    "auth": "$auth_token",
    "id": 1
}
EOF
)
    curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result[0].templateid'
}

# 添加主机
create_host() {
    local hostname=$1
    local host_ip=$2
    local group_id=$3
    local template_id=$4
    local auth_token=$5

    local payload
    payload=$(cat <<EOF
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "$hostname",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "$host_ip",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "$group_id"
            }
        ],
        "templates": [
            {
                "templateid": "$template_id"
            }
        ]
    },
    "auth": "$auth_token",
    "id": 1
}
EOF
)
    curl -s -X POST -H "Content-Type: application/json-rpc" -d "$payload" "$ZABBIX_URL" | jq -r '.result.hostids[0]'
}

# 主程序
main() {
    echo "[INFO] 获取 Token..."
    AUTH_TOKEN=$(get_auth_token)
    if [ -z "$AUTH_TOKEN" ]; then
        echo "[ERROR] 获取 Token 失败,请检查用户或密码。"
        exit 1
    fi
    echo "[INFO] Token 获取成功。"

    echo "[INFO] 获取主机组 ID..."
    GROUP_ID=$(get_group_id "$GROUP_NAME" "$AUTH_TOKEN")
    if [ -z "$GROUP_ID" ]; then
        echo "[ERROR] 获取主机组 ID 失败。"
        exit 1
    fi
    echo "[INFO] 主机组 ID: $GROUP_ID"

    echo "[INFO] 获取模板 ID..."
    TEMPLATE_ID=$(get_template_id "$TEMPLATE_NAME" "$AUTH_TOKEN")
    if [ -z "$TEMPLATE_ID" ]; then
        echo "[ERROR] 模板 '$TEMPLATE_NAME' 不存在。"
        exit 1
    fi
    echo "[INFO] 模板 ID: $TEMPLATE_ID"

    echo "[INFO] 创建主机..."
    HOST_ID=$(create_host "$HOSTNAME" "$HOST_IP" "$GROUP_ID" "$TEMPLATE_ID" "$AUTH_TOKEN")
    if [ -z "$HOST_ID" ]; then
        echo "[ERROR] 主机创建失败。"
        exit 1
    fi
    echo "[INFO] 主机创建成功,ID: $HOST_ID"
}

main

相关文章:

  • 【Python爬虫】使用python脚本拉取网页指定小说章节
  • [250310] Mistral 发布世界领先的文档理解 API:Mistral OCR | 谷歌利用 AI 保护自然的三种新方式
  • 可视化图解算法:反转链表
  • 《面向长尾分布的甲骨文识别算法设计与实现 》开题报告
  • 力扣hot100二刷——哈希、双指针、滑动窗口
  • C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用
  • 【gcc编译以及Makefile与GDB调试】
  • python LLM工具包
  • JavaScript数据类型和内存空间
  • 20-智慧社区物业管理平台
  • Java【多线程】(3)单例模式与线程安全
  • 大模型如何从开始到编译出Engine
  • [免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】
  • 一个简化版的进程内通信库实现
  • 深入理解Java中的static关键字及其内存原理
  • 《云原生技术:DeepSeek分布式推理的效能倍增器》
  • Git系列之git checkout
  • 发起请求的步骤
  • Spring Boot整合WebSocket
  • 基于深度学习的中文文本情感分析系统
  • 荣盛发展:新增未支付债务11.05亿元
  • 多少Moreless:向世界展示现代中式家具的生活美学
  • 朝鲜称将在各领域采取反制措施,应对美国敌对挑衅
  • 混乱的5天:俄乌和谈如何从充满希望走向“卡壳”
  • 把中国声音带向世界,DG和Blue Note落户中国
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆