3425 字
17 分钟
05-Zabbix-Items-监控项

Zabbix 6.4 分布式企业级性能监控平台#

Zabbix Items 监控项
官网:https://www.zabbix.com/cn

一、实验环境#

节点角色IP 地址操作系统:硬件规格
rocky-9-16MySQL 数据库(版本:8.0)
加装:Zabbix Agent 客户端代理
192.168.168.16/24Rocky Linux 91 vCPU、2GB 内存
rocky-9-17Nginx + PHP Web 前端
加装:Zabbix Agent 客户端代理
192.168.168.17/24Rocky Linux 91 vCPU、2GB 内存
rocky-9-18Zabbix Server 核心服务(版本:6.4)192.168.168.18/24Rocky Linux 91 vCPU、2GB 内存
rocky-9-19被监控主机
安装:Zabbix Agent 客户端代理
192.168.168.19/24Rocky Linux 91 vCPU、2GB 内存

二、 了解 Items 监控项#

衡量一个人的身体健康状态,需要通过一个个的健康检查手段来获取其身高、体重、心跳、血压 等健康指标值,因此,这些<健康检查手段>就是一个个的<Items 监控项>。
★ <Items 监控项>官方指南:
https://www.zabbix.com/documentation/6.0/en/manual/config/items
★ <Zabbix Agent>的<内置 Key 监控键>:
https://www.zabbix.com/documentation/6.0/en/manual/config/items/itemtypes/zabbix_agent

1. 了解:<items 监控项>#

(1) <items 监控项>#

★ <items 监控项>的作用:负责通过<Key 监控键>从<被监控设备>上收集<性能指标数据>。
★ <items 监控项>的类型:Zabbix agent(被动模式)、Zabbix agent(主动模式)、SNMP agent、SNMP traps、IPMI ... 等等

(2) <Key 监控键>#

★ <Key 监控键>的作用:负责定义一个用于收集<性能指标数据>的<方法>。
♦ 某些<监控代理程序>(例如:Zabbix Agent)已经会为我们提供一些内置的<Key 监控键>。
★ <Key 监控键>的格式:Key_name + Key_value + 传参
♦ Key_name 是:方法的<名称标识>
♦ Key_value 是:方法的<实施细则>
♦ 传参 是:方法的<可选参数>,有助于我们采集<特定维度的样本数据>
例如:
针对<身高>这个 Key 键,我们可以设置一个<姓名>参数,从而获取<指定人名的身高>。

★ 举例说明:
##
## Zabbix Agent 内置的<Key 监控键>:system.cpu.load[<cpu>,<mode>]
## system.cpu.load 就是:一个<名称标识>
## [<cpu>,<mode>] 就是:两个传参
## <cpu> 参数:取值 all 表示计算:所有 CPU 的负载(这是:默认值)
## 取值 percpu 表示计算:每 CPU 核心的负载(目前不支持)
## <mode>参数:取值 avg1 表示计算:1 分钟平均值(这是:默认值)
## 取值 avg5 表示计算:5 分钟平均值
## 取值 avg15 表示计算:15 分钟平均值
##
##
Terminal window
system.cpu.load ## 表示:计算所有 CPU 的 1 分钟平均负载值 (第一个传参为默认值,第二个传参为默认值)
system.cpu.load[,avg1] ## 表示:计算所有 CPU 的 1 分钟平均负载值 (第一个传参为默认值,第二个传参为 avg1)
system.cpu.load[all] ## 表示:计算所有 CPU 的 1 分钟平均负载值 (第一个传参为 all,第二个传参为默认值)
system.cpu.load[all,avg1] ## 表示:计算所有 CPU 的 1 分钟平均负载值 (第一个传参为 all,第二个传参为 avg1)
system.cpu.load[all,avg5] ## 表示:计算所有 CPU 的 5 分钟平均负载值 (第一个传参为 all,第二个传参为 avg5)
system.cpu.load[all,avg15] ## 表示:计算所有 CPU 的 15 分钟平均负载值(第一个传参为 all,第二个传参为 avg15)

2. 了解:的<Key 内置监控键>#

(1) 列出:的<Key 内置监控键>#

##
## 在<Zabbix Agent 客户端>上,执行以下命令:
##
Terminal window
zabbix_agentd -p

(2) 调用:的<Key 内置监控键>,从而获取相应的<性能指标数据>#

##
## <Zabbix Server 服务端>,安装:zabbix-get 工具
##
Terminal window
yum install -y zabbix-get
dnf install -y zabbix-get
##
## <Zabbix Server 服务端>,采集:<Zabbix Agent>的<内置 Key 键值>
##
Terminal window
zabbix_get -s 192.168.168.19 -k system.hw.cpu ## 查看:CPU 的全部信息
## -s 192.168.168.19 Zabbix Agent 客户端 IP 地址
## -k system.hw.cpu Zabbix Agent 客户端 Key 键名及键参数
processor 0: GenuineIntel Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz working at 2592MHz

三、 应用 Items 监控项#

1. 举例 1:CPU 监控项#

2. 举例 2:内存监控项#

监控项名称(可以自定义名称)监控键含义说明
1Linux by Zabbix agent: Linux: Available memoryvm.memory.size[available]物理内存可用空间(Byte)
2Linux by Zabbix agent: Linux: Available memory in %vm.memory.size[pavailable]物理内存可用空间(%)
3Linux by Zabbix agent: Linux: Total memoryvm.memory.size[total]物理内存总体空间(Byte)
4Linux by Zabbix agent: Linux: Free swap spacesystem.swap.size[,free]SWAP 可用空间(Byte)
5Linux by Zabbix agent: Linux: Free swap space in %system.swap.size[,pfree]SWAP 可用空间(%)
6Linux by Zabbix agent: Linux: Total swap spacesystem.swap.size[,total]SWAP 总体空间(Byte)

3. 举例 3:磁盘监控项#

监控项名称(可以自定义名称)监控键含义说明
1Mounted filesystem discovery: /: Free inodes in %vfs.fs.inode[/,pfree]/根分区的 inodes 节点剩余量(%)
2Mounted filesystem discovery: /: Space utilizationvfs.fs.size[/,pused]/根分区的剩余容量(%)
3Mounted filesystem discovery: /: Used spacevfs.fs.size[/,used]/根分区的已用容量(Byte)
4Mounted filesystem discovery: /: Total spacevfs.fs.size[/,total]/根分区的总体容量(Byte)
5Mounted filesystem discovery: /boot: Free inodes in %vfs.fs.inode[/boot,pfree]/boot 分区的 inodes 节点剩余量(%)
6Mounted filesystem discovery: /boot: Space utilizationvfs.fs.size[/boot,pused]/boot 分区的剩余容量(%)
7Mounted filesystem discovery: /boot: Used spacevfs.fs.size[/boot,used]/boot 分区的已用容量(Byte)
8Mounted filesystem discovery: /boot: Total spacevfs.fs.size[/boot,total]/boot 分区的总体容量(Byte)

4. 举例 4:网络监控项#

监控项名称(可以自定义名称)监控键含义说明
1Interface ens33: Inbound packets discardednet.if.in[“ens33”,dropped]被丢弃的入站包(个数)
2Interface ens33: Inbound packets with errorsnet.if.in[“ens33”,errors]错误的入站包(个数)
3Interface ens33: Bits receivednet.if.in[“ens33”]接收的入站包(Byte)
4Interface ens33: Outbound packets discardednet.if.out[“ens33”,dropped]被丢弃的出站包(个数)
5Interface ens33: Outbound packets with errorsnet.if.out[“ens33”,errors]错误的出站包(个数)
6Interface ens33: Bits sentnet.if.out[“ens33”]接收的出站包(Byte)
7Interface ens33: Operational statusvfs.file.contents[“/sys/class/net/ens33/operstate”]接口状态值(数字)
8Interface ens33: Speedvfs.file.contents[“/sys/class/net/ens33/speed”]接口速率规格(bps)
9Interface ens33: Interface typevfs.file.contents[“/sys/class/net/ens33/type”]接口协议类型(数字)

5. 举例 5:进程监控项#

6. 举例 6:内核监控项#

监控项名称(可以自定义名称)监控键含义说明
1Linux by Zabbix agent: Linux: Maximum number of processeskernel.maxproc可执行的最大进程数(整数)
2Linux by Zabbix agent: Linux: Maximum number of open file descriptorskernel.maxfiles可打开的最大文件数(整数)

四、 自定义 Items 监控项#

在工作中,默认已加载的<Items 监控项>不能实现全部的工作目标,我们需要创建<自定义 Items 监控项>;而创建<自定义 Items 监控项>,就需要先创建<自定义 Key 监控键>。

1. 创建:<Zabbix Agent 客户端代理>的<自定义 Key 监控键>#

创建<自定义 Key 监控键>有两种方法:
(1) 简单的命令法
(2) 强大的脚本法

(1) 方法 1:命令法(简单)#

##
## 第一步:配置<Zabbix Agent 客户端代理>
## ☛ 开启:针对<UserParameter 用户自定义 Key 键>的<传参功能>
##
Terminal window
vi /etc/zabbix/zabbix_agentd.conf
... ...
##
## 导入:/etc/zabbix/zabbix_agentd.d/*conf 配置文件,从而方便我们增删配置(这是:默认配置)
##
Include=/etc/zabbix/zabbix_agentd.d/*.conf
... ...
##
## 开启:针对<UserParameter 用户自定义 Key 键>的<传参功能>
## UnsafeUserParameters=0 表示:不允许向<UserParameter 用户定义 Key 键>传递<键参数>
## UnsafeUserParameters=1 表示:允许向<UserParameter 用户定义 Key 键>传递<键参数>
## ♦ 传参过程中,不允许传递这些字符:\ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
## ♦ 传参过程中,也不允许传递<换行符>。
##
UnsafeUserParameters=1
... ...
##
## 第二步:配置<Zabbix Agent 客户端代理>
## ☛ 定义:<Zabbix Agent 客户端代理>的<用户 Key 自定义键>
## ❃ Key 键功能:通过 ss 命令,来获取<Zabbix 客户端>的<tcp 或 udp 连接总数>
##
Terminal window
vi /etc/zabbix/zabbix_agentd.d/myDiyKeys.conf
##
## 配置语法:
## UserParameter=<方法名称>,<方法内容>
## ## 允许:在一个<配置文件>中定义多个<UserParameter>
##
## ## 方法内容:
## ♦ 可以是<command 命令>或者<shell 脚本>
## ♦ 可以使用<管道符>来组合<多个 command 命令>
## ♦ 可以使用$1、$2、$3 ... 命令行传参
##
## ## 方法名称(即:Key 键名):
## ♦ 可以直接就是<字符串>,如:net.if.connections.count
## ♦ 也可定义一个<数组名>,如:net.if.connections.count[*]
## <*星号>是一个<通配符>,用于接收<命令 或 脚本>的<命令行传参>
## 举例说明:
## 假设:我们定义了 UserParameter=net.if.connections.count[*],ss $1 $2 -H | wc -l
## 则调用方法如下:
## 调用方法 1:net.if.connections.count[-t,-u] 或 net.if.connections.count[--tcp,--udp]
## 调用方法 2:net.if.connections.count[-t] 或 net.if.connections.count[--tcp]
## 调用方法 3:net.if.connections.count[-u] 或 net.if.connections.count[--udp]
## 调用方法 4:net.if.connections.count[-tunl] 或 net.if.connections.count[-tu,-nl]
##
UserParameter=net.if.connections.sum[*],ss $1 $2 -H | wc -l
systemctl restart zabbix-agent.service
##
## 第三步:在<Zabbix Server 服务端>上,执行测试
##
Terminal window
dnf install -y zabbix-get
## 获取:tcp 和 udp 连接数
zabbix_get -s 192.168.168.19 -k net.if.connections.sum[-t,-u]

(2) 方法 2:脚本法(强大)#

##
## 第一步:在<Zabbix Agent 客户端代理>上,编写<本地 Shell 脚本>
## ☛ 脚本功能:获取<Zabbix 客户端>的<文件系统挂载点剩余空间>
##
/bin/bash
vi /etc/zabbix/zabbix_agentd.d/myShellScript01.sh
mountDir=$1
df -h $mountDir | awk 'NR>1{print $4}'
##
## 第二步:配置<Zabbix Agent 客户端代理>
## ☛ 开启:针对<UserParameter 用户自定义 Key 键>的<传参功能>
##
Terminal window
vi /etc/zabbix/zabbix_agentd.conf
... ...
##
## 导入:/etc/zabbix/zabbix_agentd.d/*conf 配置文件,从而方便我们增删配置(这是:默认配置)
##
Include=/etc/zabbix/zabbix_agentd.d/*.conf
... ...
##
## 开启:针对<UserParameter 用户定义 Key 键>的<传参功能>
## UnsafeUserParameters=0 表示:不允许向<UserParameter 用户定义 Key 键>传递<键参数>
## UnsafeUserParameters=1 表示:允许向<UserParameter 用户定义 Key 键>传递<键参数>
## ♦ 传参过程中,不允许传递这些字符:\ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
## ♦ 传参过程中,也不允许传递<换行符>。
##
UnsafeUserParameters=1
... ...
##
## 第三步:配置<Zabbix Agent 客户端代理>
## ☛ 定义:调用<本地 Shell 脚本>的<Key 键>
## ❃ Key 键功能:通过<脚本>来获取<文件系统挂载点剩余空间>
##
Terminal window
vi /etc/zabbix/zabbix_agentd.d/myDiyKeys.conf
UserParameter=net.if.connections.sum[*],ss $1 $2 -H | wc -l
## 添加如下:
UserParameter=mount.filesystem.size.free[*],bash /etc/zabbix/zabbix_agentd.d/myShellScript01.sh $1
systemctl restart zabbix-agent.service
##
## 第四步:在<Zabbix Server 服务端>上,执行测试
##
Terminal window
dnf install -y zabbix-get
## 获取:/挂载点的剩余空间
zabbix_get -s 192.168.168.19 -k mount.filesystem.size.free[/]
15G
## 获取:/boot 挂载点的剩余空间
zabbix_get -s 192.168.168.19 -k mount.filesystem.size.free[/boot]
1.7G

(3) 实用案例:脚本法#

##
## 第一步:在<Zabbix Agent 客户端代理>上,编写<本地 Shell 脚本>
## ☛ 脚本功能:获取<Zabbix 客户端网卡>的<当前传输速率>,计量单位为:B 字节/秒
##
/bin/bash
vi /etc/zabbix/zabbix_agentd.d/myShellScript02.sh
## $1 用于指定:网卡名称,如:ens33、ens34
## $2 用于指定:数据类型:如:rx(接收速率)、tx(发送速率)
if ! [[ $# -eq 2 ]]; then
echo "0"
exit
fi
if ! [[ "$2" == "rx" ]] && ! [[ "$2" == "tx" ]]; then
echo "0"
exit
fi
ifcName=$1
rateType=$2
before_rx_bytes=`cat /sys/class/net/$ifcName/statistics/rx_bytes`
before_tx_bytes=`cat /sys/class/net/$ifcName/statistics/tx_bytes`
sleep 1
after_rx_bytes=`cat /sys/class/net/$ifcName/statistics/rx_bytes`
after_tx_bytes=`cat /sys/class/net/$ifcName/statistics/tx_bytes`
rx_rate=$(($after_rx_bytes-$before_rx_bytes))
tx_rate=$(($after_tx_bytes-$before_tx_bytes))
if [[ "$2" == "rx" ]]; then
echo "$rx_rate"
else
echo "$tx_rate"
fi
##
## 第二步:配置<Zabbix Agent 客户端代理>
## ☛ 开启:针对<UserParameter 用户自定义 Key 键>的<传参功能>
##
Terminal window
vi /etc/zabbix/zabbix_agentd.conf
... ...
##
## 导入:/etc/zabbix/zabbix_agentd.d/*conf 配置文件,从而方便我们增删配置(这是:默认配置)
##
Include=/etc/zabbix/zabbix_agentd.d/*.conf
... ...
##
## 开启:针对<UserParameter 用户定义 Key 键>的<传参功能>
## UnsafeUserParameters=0 表示:不允许向<UserParameter 用户定义 Key 键>传递<键参数>
## UnsafeUserParameters=1 表示:允许向<UserParameter 用户定义 Key 键>传递<键参数>
## ♦ 传参过程中,不允许传递这些字符:\ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
## ♦ 传参过程中,也不允许传递<换行符>。
##
UnsafeUserParameters=1
... ...
##
## 第三步:配置<Zabbix Agent 客户端代理>
## ☛ 定义:调用<本地 Shell 脚本>的<Key 键>
## ❃ Key 键功能:通过<脚本>来获取<当前传输速率>
##
Terminal window
vi /etc/zabbix/zabbix_agentd.d/myDiyKeys.conf
UserParameter=net.if.connections.sum[*],ss $1 $2 -H | wc -l
UserParameter=mount.filesystem.size.free[*],bash /etc/zabbix/zabbix_agentd.d/myShellScript01.sh $1
## 添加如下:
UserParameter=net.if.rate[*],bash /etc/zabbix/zabbix_agentd.d/myShellScript02.sh $1 $2
systemctl restart zabbix-agent.service
##
## 第四步:在<Zabbix Server 服务端>上,执行测试
##
Terminal window
dnf install -y zabbix-get
## 获取:ens33 网卡的下载速率
zabbix_get -s 192.168.168.19 -k net.if.rate[ens33,rx]
912
## 获取:ens33 网卡的上传速率
zabbix_get -s 192.168.168.19 -k net.if.rate[ens33,rx]
367

2. 创建:<Zabbix 自定义 Item 监控项>#

(1) 方法:新建#

★ Web 控制台
Configuration
Hosts
server01
Items
右上角:Create item

(2) 解析:定义栏#

##
## ♦ Name ## 定义:<item 监控项>的<自定义名称>
## ♦ Type ## 指定:<item 监控项>采用的<数据采集方法>,如:Zabbix agent 客户端代理程序
## ♦ Key ## 选取:<item 监控项>需要使用的<内置 Key 键>
## ♦ Host interface ## 指定:连接<Zabbix 客户端主机>的<IP 与 Port>
## ♦ Type of information ## 设置:<Value 键值>的<数据类型>,如:Numeric(unsigned)、Numeric(float)、Character、Log、Text
## ♦ Units ## 设置:<Value 键值>的<自定义计量单位>,如:bytes
## ♦ Update interval ## 设置:<数据采样>的<时间间隔>
## ♦ Custom intervals ## 设置:<数据采样>的<自定义时间间隔>,注意:Update interval 与 Custom intervals 不能同时使用
## 可以添加多个<自定义时间间隔>:
## wd1-5h8-22m/10 周一到周五,每 5 点到 22 点,每隔 10 分钟执行一次
## wd6-7h0-24m/30 周六到周日,每 0 点到 24 点,每隔 30 分钟执行一次
## ♦ History storage period ## 设置:<历史数据>在<数据库>中的<留存时长>,如:90d(90 天)
## ◪<历史数据>是指:每一个收集到的监控数据,即:<采样数据>的<原始采样值>。
## ◪强烈建议:将<历史数据>的<保留时长>设置得尽可能的小,从而减少<数据库>的空间占用。
## ♦ Trend storage period ## 设置:<趋势数据>在<数据库>中的<留存时长>,如:365d(365 天)
## ◪<趋势数据>是指:按小时统计计算的平均值数据,即:<采样数据>的<平均计算值>
## ◪<趋势数据>采用:一种内建的历史数据压缩机制,来存储<数字类型 监控项>的<每小时的
## 最小值、最大值、平均值和记录数量。
## ♦ Show value ## 选择:<映射规则>,从而针对<监控项>不同的<采样值>,来输出<指定的显示信息>。
## ◪<映射规则>不会更改<采样值>,它仅用于改变<显示数据>。
## ◪<映射规则>仅适用于:Numeric(unsigned)、Numeric(float)、Character <数据类型>。
## 例如:Service state 映射规则 0 ⇒ Down
## 1 ⇒ Up
## ♦ New application ## 创建并链接:一个新的<自定义的应用集>
## ♦ Applications ## 多选并链接:一个或多个<已有的应用集>
## ♦ Populates host inventory field ## 设置:将<采样值>填充到<指定的主机资产记录字段>
## ♦ Description ## 编写:描述信息
## ♦ Enabled ## 选择:立即启用
##

(3) 演示:新建<网卡 item 监控项>#

★ 示例说明:
(1) 针对<server01 客户端>,添置一个<item 监控项>,来采集<ens33 网卡>的<下载/上传 实时速率>
(2) 使用:<Zabbix Agent 客户端代理>的<自定义 Key 键:net.if.rate[ name, rx|tx ]>
##
## 1. 开始创建:自定义的<监控项>
##

##
## 2. 填写:<监控项>的<各项定义栏>
##

05-Zabbix-Items-监控项
https://fuwari.vercel.app/posts/zabbix监控/05-zabbix-items-监控项/
作者
肥猫少杰
发布于
2026-06-03
许可协议
CC BY-NC-SA 4.0