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

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

http://www.kler.cn/a/577169.html

相关文章:

  • 深入理解Linux网络随笔(四):内核是如何与用户进程协作的(下篇:多路I/O复用模型epoll)
  • 大数据与物联网(IoT)的完美融合:驱动智能新时代
  • vulnhub靶场之【digitalworld.local系列】的snakeoil靶机
  • 【每日学点HarmonyOS Next知识】多继承、swiper容器、事件传递、滚动安全区域、提前加载网络图片
  • MySQL中的脏读与幻读:概念、影响与解决方案
  • 【Linux】--- 线程概念、线程控制
  • Day4 C语言与画面显示练习
  • 华为hcie证书有什么作用?
  • JVM G1垃圾回收器详细解析
  • Spring Boot项目 提示java: 程序包com.alibaba.druid.pool不存在
  • 【定制开发】碰一碰发视频系统定制开发,支持OEM
  • 【halcon】如何理解 halcon 中的domain 之 “区域被裁剪掉了!”
  • 【2025】Electron + React 架构筑基——从零到一的跨平台开发
  • SyntaxError: Invalid or unexpected token in JSON at position x
  • Trae 是一款由 AI 驱动的 IDE,让编程更加愉悦和高效。国际版集成了 GPT-4 和 Claude 3.5,国内版集成了DeepSeek-r1
  • 高性能算法NGO!北方苍鹰优化算法(Northern Goshawk Optimization,NGO)
  • 用低代码平台集成人工智能:无需专业开发也能实现智能化
  • 虚拟路由冗余协议(VRRP)技术详解:原理、应用与配置实践
  • matlab散点图
  • Android原生gif动图加载AnimatedImageDrawable