一、安装 Zabbix-Agent(PVE 专用源)

PVE 是 Debian 系,和 CentOS 源不同,用下面的步骤:

1. 添加官方源(适配 PVE Debian 环境)

wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-4+debian11_all.deb
dpkg -i zabbix-release_6.0-4+debian11_all.deb
apt update

2. 安装客户端

apt install -y zabbix-agent

报错无法正确安装的解决办法

第一步:先卸载冲突的源(必须执行)

rm -f /etc/apt/sources.list.d/zabbix*.list
apt update

第二步:安装 PVE 原生源里的 zabbix-agent(绝对兼容)

apt install -y zabbix-agent

第三步:如果还是不行,执行这个(终极兜底)

wget https://packages.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-agent/zabbix-agent_6.0.30-1%2Bdeb12u1_amd64.deb
dpkg -i zabbix-agent_6.0.30-1+deb12u1_amd64.deb
apt -f install -y

二、修改配置文件

nano /etc/zabbix/zabbix_agentd.conf

修改 3 个核心参数(其余不动):

# 改成你的 Zabbix 服务端 IP
Server=你的Zabbix服务器IP
ServerActive=你的Zabbix服务器IP

# 本机唯一名称(建议写 pve9)
Hostname=pve9

保存退出(nano 里按 Ctrl+O 保存,Ctrl+X 退出)。


三、放行端口(PVE 防火墙)

  1. 命令行放行(直接生效):
    ufw allow 10050/tcp
    
  2. 也可以在 PVE Web 界面放行:
    • 选中 pve9 → 防火墙 → 新建规则
    • 方向:入站,协议:TCP,端口:10050,动作:允许

四、启动并设置开机自启

systemctl start zabbix-agent
systemctl enable zabbix-agent
systemctl status zabbix-agent

看到 active (running) 就是正常运行。


五、Zabbix 网页端添加主机

  1. 配置 → 主机 → 创建主机
  2. 主机名称:和配置文件里的 Hostname 一致(pve9
  3. 群组:选择对应的分组(如 Linux 服务器
  4. IP 地址:填 PVE 的内网 IP,端口 10050
  5. 模板链接:选择 Linux by Zabbix agent
  6. 保存,等待 3-5 分钟,监控图标变绿就是正常采集。

六、关键说明

  • 该客户端只会监控 PVE 宿主机本身(CPU、内存、磁盘、系统),不会影响任何虚拟机
  • 后续可以自定义监控项,监控宿主机上的虚拟机数量、存储池使用率等

一、PVE 虚拟机运行状态监控脚本

功能说明

  • 自动统计:运行中 / 已停止的虚拟机数量
  • 可监控指定 VMID 的状态(在线 / 离线)
  • 异常状态可配置告警

1. 脚本文件 /etc/zabbix/scripts/pve_vm_status.sh

#!/bin/bash
# 用途:PVE 虚拟机运行状态监控
# 用法:./pve_vm_status.sh [--running|--stopped|--total|VMID]

case "$1" in
    --running)
        qm status | grep running | wc -l
        ;;
    --stopped)
        qm status | grep stopped | wc -l
        ;;
    --total)
        qm status | wc -l
        ;;
    *)
        if [[ $1 =~ ^[0-9]+$ ]]; then
            qm status "$1" | awk '/status:/ {print $2}'
        else
            echo "Usage: $0 [--running|--stopped|--total|VMID]"
            exit 1
        fi
        ;;
esac

2. 设置权限与路径

mkdir -p /etc/zabbix/scripts
chmod 755 /etc/zabbix/scripts/pve_vm_status.sh
chown zabbix:zabbix /etc/zabbix/scripts/pve_vm_status.sh

3. Zabbix-Agent 配置

编辑 /etc/zabbix/zabbix_agentd.conf,添加:

UserParameter=pve.vm.running,/etc/zabbix/scripts/pve_vm_status.sh --running
UserParameter=pve.vm.stopped,/etc/zabbix/scripts/pve_vm_status.sh --stopped
UserParameter=pve.vm.total,/etc/zabbix/scripts/pve_vm_status.sh --total
# 如需监控特定 VMID(例如 100)
UserParameter=pve.vm.status[*],/etc/zabbix/scripts/pve_vm_status.sh $1

重启 agent:

systemctl restart zabbix-agent

4. Zabbix 服务端配置

  • 创建监控项:键值 pve.vm.runningpve.vm.stopped
  • 创建触发器:当 pve.vm.stopped 数量异常增加时告警
  • 监控单台 VM:键值 pve.vm.status[100],触发器条件:last() <> "running"

二、LVM / 存储池使用率监控脚本

功能说明

  • 监控 PVE 默认 local-lvm、自定义 LVM 卷使用率
  • 监控目录存储池使用率
  • 输出百分比,可直接配置告警阈值

1. 脚本文件 /etc/zabbix/scripts/pve_storage_usage.sh

#!/bin/bash
# 用途:PVE 存储池使用率监控
# 用法:./pve_storage_usage.sh [lvm|dir] <存储名称>

STORAGE_TYPE="$1"
STORAGE_NAME="$2"

case "$STORAGE_TYPE" in
    lvm)
        # 监控 LVM 卷使用率
        lvs --noheadings --units g -o lv_name,lv_size,data_percent | awk -v name="$STORAGE_NAME" '$1 == name {print $3}'
        ;;
    dir)
        # 监控目录存储池使用率
        MOUNT_POINT=$(pvesm status | awk -v name="$STORAGE_NAME" '$1 == name {print $4}')
        if [ -n "$MOUNT_POINT" ]; then
            df -P "$MOUNT_POINT" | awk 'NR==2 {print $5}' | sed 's/%//'
        else
            echo "0"
        fi
        ;;
    *)
        echo "Usage: $0 [lvm|dir] <storage-name>"
        exit 1
        ;;
esac

2. 设置权限

chmod 755 /etc/zabbix/scripts/pve_storage_usage.sh
chown zabbix:zabbix /etc/zabbix/scripts/pve_storage_usage.sh

3. Zabbix-Agent 配置

# LVM 存储(例如 local-lvm)
UserParameter=pve.storage.lvm[*],/etc/zabbix/scripts/pve_storage_usage.sh lvm $1
# 目录存储(例如 local)
UserParameter=pve.storage.dir[*],/etc/zabbix/scripts/pve_storage_usage.sh dir $1

重启 agent:

systemctl restart zabbix-agent

4. Zabbix 服务端配置

  • 监控项:键值 pve.storage.lvm[local-lvm]pve.storage.dir[local]
  • 触发器:使用率 > 80% 时告警,> 90% 严重告警

三、宿主机温度、硬件健康监控脚本

功能说明

  • 监控 CPU 核心温度、主板温度
  • 监控硬盘 SMART 健康状态
  • 需安装依赖工具 lm-sensorssmartmontools

1. 安装依赖工具

apt install -y lm-sensors smartmontools
sensors-detect --auto

2. 脚本文件 /etc/zabbix/scripts/pve_hw_health.sh

#!/bin/bash
# 用途:PVE 宿主机硬件健康监控
# 用法:./pve_hw_health.sh [cpu_temp|disk_health|system_temp]

case "$1" in
    cpu_temp)
        # 获取 CPU 最高核心温度
        sensors | awk '/Core/ {print $3}' | sed 's/+//;s/°C//' | sort -nr | head -1
        ;;
    disk_health)
        # 监控所有硬盘 SMART 状态(1=正常,0=异常)
        for disk in /dev/sd[a-z]; do
            if smartctl -H "$disk" 2>/dev/null | grep -q "PASSED"; then
                echo 1
                exit 0
            fi
        done
        echo 0
        ;;
    system_temp)
        # 获取主板/系统温度(根据实际传感器调整)
        sensors | awk '/System/ {print $2}' | sed 's/+//;s/°C//' | head -1
        ;;
    *)
        echo "Usage: $0 [cpu_temp|disk_health|system_temp]"
        exit 1
        ;;
esac

3. 设置权限

chmod 755 /etc/zabbix/scripts/pve_hw_health.sh
chown zabbix:zabbix /etc/zabbix/scripts/pve_hw_health.sh
# 给 zabbix 用户授权 smartctl
echo "zabbix ALL=(ALL) NOPASSWD: /usr/sbin/smartctl" >> /etc/sudoers

4. Zabbix-Agent 配置

# CPU 最高温度
UserParameter=pve.hw.cpu_temp,/etc/zabbix/scripts/pve_hw_health.sh cpu_temp
# 硬盘健康状态(1=正常,0=异常)
UserParameter=pve.hw.disk_health,/usr/bin/sudo /etc/zabbix/scripts/pve_hw_health.sh disk_health
# 系统温度
UserParameter=pve.hw.system_temp,/etc/zabbix/scripts/pve_hw_health.sh system_temp

重启 agent:

systemctl restart zabbix-agent

5. Zabbix 服务端配置

  • CPU 温度触发器:last(pve.hw.cpu_temp) > 80 告警
  • 硬盘健康触发器:last(pve.hw.disk_health) = 0 告警(硬盘故障)

四、注意事项

  1. 权限问题:部分脚本(如 smartctl)需要 sudo 权限,必须在 /etc/sudoers 中授权 zabbix 用户。
  2. 传感器适配:温度监控脚本需根据你的硬件传感器名称调整,可先运行 sensors 查看实际输出。
  3. 测试脚本:配置完成后,先在命令行运行脚本,确认输出正确,再配置到 Zabbix。
  4. Zabbix 模板:可将以上监控项整合为一个「PVE 宿主机监控模板」,后续添加节点直接套用。
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐