3425 字
17 分钟
05-Zabbix-Items-监控项
Zabbix 6.4 分布式企业级性能监控平台
Zabbix Items 监控项官网:https://www.zabbix.com/cn
一、实验环境
| 节点 | 角色 | IP 地址 | 操作系统: | 硬件规格 |
|---|---|---|---|---|
| rocky-9-16 | MySQL 数据库(版本:8.0) 加装:Zabbix Agent 客户端代理 | 192.168.168.16/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
| rocky-9-17 | Nginx + PHP Web 前端 加装:Zabbix Agent 客户端代理 | 192.168.168.17/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
| rocky-9-18 | Zabbix Server 核心服务(版本:6.4) | 192.168.168.18/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
| rocky-9-19 | 被监控主机 安装:Zabbix Agent 客户端代理 | 192.168.168.19/24 | Rocky Linux 9 | 1 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_agent1. 了解:<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 分钟平均值 ## ## 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 客户端>上,执行以下命令:## zabbix_agentd -p
(2) 调用:的<Key 内置监控键>,从而获取相应的<性能指标数据>
#### <Zabbix Server 服务端>,安装:zabbix-get 工具## yum install -y zabbix-get dnf install -y zabbix-get#### <Zabbix Server 服务端>,采集:<Zabbix Agent>的<内置 Key 键值>## 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:内存监控项
| 监控项名称(可以自定义名称) | 监控键 | 含义说明 | |
|---|---|---|---|
| 1 | Linux by Zabbix agent: Linux: Available memory | vm.memory.size[available] | 物理内存可用空间(Byte) |
| 2 | Linux by Zabbix agent: Linux: Available memory in % | vm.memory.size[pavailable] | 物理内存可用空间(%) |
| 3 | Linux by Zabbix agent: Linux: Total memory | vm.memory.size[total] | 物理内存总体空间(Byte) |
| 4 | Linux by Zabbix agent: Linux: Free swap space | system.swap.size[,free] | SWAP 可用空间(Byte) |
| 5 | Linux by Zabbix agent: Linux: Free swap space in % | system.swap.size[,pfree] | SWAP 可用空间(%) |
| 6 | Linux by Zabbix agent: Linux: Total swap space | system.swap.size[,total] | SWAP 总体空间(Byte) |
3. 举例 3:磁盘监控项
| 监控项名称(可以自定义名称) | 监控键 | 含义说明 | |
|---|---|---|---|
| 1 | Mounted filesystem discovery: /: Free inodes in % | vfs.fs.inode[/,pfree] | /根分区的 inodes 节点剩余量(%) |
| 2 | Mounted filesystem discovery: /: Space utilization | vfs.fs.size[/,pused] | /根分区的剩余容量(%) |
| 3 | Mounted filesystem discovery: /: Used space | vfs.fs.size[/,used] | /根分区的已用容量(Byte) |
| 4 | Mounted filesystem discovery: /: Total space | vfs.fs.size[/,total] | /根分区的总体容量(Byte) |
| 5 | Mounted filesystem discovery: /boot: Free inodes in % | vfs.fs.inode[/boot,pfree] | /boot 分区的 inodes 节点剩余量(%) |
| 6 | Mounted filesystem discovery: /boot: Space utilization | vfs.fs.size[/boot,pused] | /boot 分区的剩余容量(%) |
| 7 | Mounted filesystem discovery: /boot: Used space | vfs.fs.size[/boot,used] | /boot 分区的已用容量(Byte) |
| 8 | Mounted filesystem discovery: /boot: Total space | vfs.fs.size[/boot,total] | /boot 分区的总体容量(Byte) |
4. 举例 4:网络监控项
| 监控项名称(可以自定义名称) | 监控键 | 含义说明 | |
|---|---|---|---|
| 1 | Interface ens33: Inbound packets discarded | net.if.in[“ens33”,dropped] | 被丢弃的入站包(个数) |
| 2 | Interface ens33: Inbound packets with errors | net.if.in[“ens33”,errors] | 错误的入站包(个数) |
| 3 | Interface ens33: Bits received | net.if.in[“ens33”] | 接收的入站包(Byte) |
| 4 | Interface ens33: Outbound packets discarded | net.if.out[“ens33”,dropped] | 被丢弃的出站包(个数) |
| 5 | Interface ens33: Outbound packets with errors | net.if.out[“ens33”,errors] | 错误的出站包(个数) |
| 6 | Interface ens33: Bits sent | net.if.out[“ens33”] | 接收的出站包(Byte) |
| 7 | Interface ens33: Operational status | vfs.file.contents[“/sys/class/net/ens33/operstate”] | 接口状态值(数字) |
| 8 | Interface ens33: Speed | vfs.file.contents[“/sys/class/net/ens33/speed”] | 接口速率规格(bps) |
| 9 | Interface ens33: Interface type | vfs.file.contents[“/sys/class/net/ens33/type”] | 接口协议类型(数字) |
5. 举例 5:进程监控项

6. 举例 6:内核监控项
| 监控项名称(可以自定义名称) | 监控键 | 含义说明 | |
|---|---|---|---|
| 1 | Linux by Zabbix agent: Linux: Maximum number of processes | kernel.maxproc | 可执行的最大进程数(整数) |
| 2 | Linux by Zabbix agent: Linux: Maximum number of open file descriptors | kernel.maxfiles | 可打开的最大文件数(整数) |
四、 自定义 Items 监控项
在工作中,默认已加载的<Items 监控项>不能实现全部的工作目标,我们需要创建<自定义 Items 监控项>;而创建<自定义 Items 监控项>,就需要先创建<自定义 Key 监控键>。1. 创建:<Zabbix Agent 客户端代理>的<自定义 Key 监控键>
创建<自定义 Key 监控键>有两种方法:(1) 简单的命令法(2) 强大的脚本法(1) 方法 1:命令法(简单)
#### 第一步:配置<Zabbix Agent 客户端代理>## ☛ 开启:针对<UserParameter 用户自定义 Key 键>的<传参功能>## 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 连接总数>## 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 服务端>上,执行测试## 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 客户端>的<文件系统挂载点剩余空间>## vi /etc/zabbix/zabbix_agentd.d/myShellScript01.sh mountDir=$1 df -h $mountDir | awk 'NR>1{print $4}'#### 第二步:配置<Zabbix Agent 客户端代理>## ☛ 开启:针对<UserParameter 用户自定义 Key 键>的<传参功能>## 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 键功能:通过<脚本>来获取<文件系统挂载点剩余空间>## 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 服务端>上,执行测试## 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 字节/秒## 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 键>的<传参功能>## 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 键功能:通过<脚本>来获取<当前传输速率>## 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 服务端>上,执行测试## 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] 3672. 创建:<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-监控项/