Zabbix Agent监控实战:自带Key+自定义Key获取数据全指南
前言
Zabbix监控的核心是“数据采集”,而Zabbix Agent作为部署在被监控主机上的轻量级组件,是采集系统、应用、硬件数据的“主力军”。它既支持直接调用自带Key监控CPU、内存等基础指标,也能通过自定义Key满足个性化监控需求(如MySQL连接数、服务进程状态),灵活适配各类监控场景。
本文从“监控远程主机”入手,详细讲解Zabbix Agent获取数据的三种方式(链接模板、自带Key、自定义Key),结合8个实战案例和常用Key清单,手把手教你用Agent采集各类监控数据,所有操作可直接复用,新手也能快速上手!
一、基础操作:监控远程主机全流程
要通过Zabbix Agent监控远程主机,需先在被监控端部署Agent并配置,再在Zabbix Server Web界面添加主机,核心步骤如下:
1. 被监控端部署Zabbix Agent(以node01为例)
# 1. 安装Zabbix Agent(需提前配置Zabbix YUM仓库,参考上一篇部署教程)
yum install -y zabbix-agent
# 2. 编辑Agent配置文件,关联Zabbix Server
vim /etc/zabbix/zabbix_agentd.conf
# 核心配置项(必改)
Server=192.168.140.10 # 被动模式:允许该IP(Zabbix Server)拉取数据
ServerActive=192.168.140.10 # 主动模式:主动向该IP(Zabbix Server)推送数据
Hostname=node01.linux.com # 被监控端唯一标识(需与Web界面主机名一致)
# 3. 启动Agent并设置开机自启
systemctl start zabbix-agent && systemctl enable zabbix-agent
# 4. 验证Agent状态(默认监听10050端口)
netstat -antp | grep zabbix_agentd
# 预期输出:0.0.0.0:10050 LISTEN(说明Agent启动成功)
2. Zabbix Web界面添加被监控主机
-
登录Zabbix Web→配置→主机→创建主机;

-
填写主机信息:
-
主机名称:
node01.linux.com(与Agent配置的Hostname一致); -
可见名称:自定义(如“node01服务器”);
-
群组:选择“Linux servers”(或自定义群组);

-
-
配置Agent接口:
-
类型:
Zabbix agent; -
IP地址:被监控端实际IP(如192.168.140.11);
-
端口:
10050(默认);
-
-
点击添加,完成主机创建。
3. 链接监控模板(快速获取基础指标)
模板是Zabbix预定义的监控项集合,链接后可自动采集CPU、内存等基础指标,无需手动创建:
-
进入刚创建的主机→模板→链接新模板;
-
在搜索框输入“Template OS Linux”→选中模板→点击添加;

-
点击更新,等待5-10分钟后,进入监测→最新数据,即可看到自动采集的基础指标。

4. 创建图形(可视化监控数据)
-
进入主机→图形→创建图形;

-
填写图形名称(如“CPU使用率监控”),选择图形类型(如“折线图”);

-
点击添加→选择需展示的监控项(如“CPU使用率”“CPU空闲率”)→选择;
-
点击更新,进入监测→图形,即可查看可视化图表。
5. 创建聚合图形(多指标集中展示)
若需在一个页面展示多个图形(如CPU、内存、磁盘),可创建聚合图形:
-
Zabbix Web→监测→聚合图形→创建聚合图形;

-
填写名称(如“node01服务器综合监控”),设置行数/列数(如2行2列);

-
点击添加→选择需添加的图形→选择;
-
拖动图形调整位置,点击更新,即可查看聚合监控页面。

二、Zabbix Agent获取数据的三种方式
Zabbix Agent支持三种数据采集方式,分别适配不同场景,灵活组合可满足绝大多数监控需求:
|
采集方式 |
适用场景 |
核心优势 |
|---|---|---|
|
链接模板 |
系统基础指标(CPU/内存/磁盘/网卡) |
零配置,快速上手 |
|
自带Key |
标准化指标(服务端口/进程数/文件) |
无需自定义,直接调用 |
|
自定义Key |
个性化需求(MySQL连接数/业务指标) |
灵活适配各类自定义场景 |
1. 常用自带Key清单(直接调用)
Zabbix Agent内置了大量常用Key,无需额外配置,可直接在Web界面创建监控项调用,核心分类如下:
(1)网卡流量监控
|
Key格式 |
说明 |
示例 |
|---|---|---|
|
net.if.in[if,] |
网卡流入流量(if为网卡名,mode可选) |
net.if.in[ens33] → ens33流入字节数 |
|
mode=errors → 流入错误包数 |
net.if.in[ens33,errors] → 流入错误包数 |
|
|
net.if.out[if,] |
网卡流出流量 |
net.if.out[ens33] → ens33流出字节数 |
|
net.if.total[if,] |
网卡总流量(流入+流出) |
net.if.total[ens33] → ens33总字节数 |

(2)服务端口监控
|
Key格式 |
说明 |
示例 |
|---|---|---|
|
net.tcp.listen[port] |
检测TCP端口是否监听(1=监听,0=未监听) |
net.tcp.listen[80] → 检测80端口状态 |
|
net.tcp.port[,port] |
检测目标IP:端口是否可达 |
net.tcp.port[,3306] → 检测本机3306端口 |
|
net.udp.listen[port] |
检测UDP端口是否监听 |
net.udp.listen[123] → 检测NTP(123端口) |
(3)进程监控
|
Key格式 |
说明 |
示例 |
|---|---|---|
|
proc.num[,,] |
进程数量(name=进程名,user=用户,state=状态) |
proc.num[httpd] → httpd进程总数 |
|
state=zomb → 僵尸进程数 |
proc.num[,,zomb] → 僵尸进程数 |
|
|
user=mysql → mysql用户启动的进程数 |
proc.num[,mysql] → mysql用户进程数 |
|
|
proc.cpu.util[] |
进程CPU使用率 |
proc.cpu.util[mysql] → mysql进程CPU使用率 |
|
proc.mem[] |
进程内存占用(单位:B) |
proc.mem[nginx] → nginx进程内存占用 |
(4)磁盘与文件监控
|
Key格式 |
说明 |
示例 |
|---|---|---|
|
vfs.fs.size[fs,] |
文件系统容量(fs=挂载点,mode=模式) |
vfs.fs.size[/,free] → /分区剩余字节数 |
|
mode=pfree → 剩余百分比 |
vfs.fs.size[/data,pfree] → /data分区剩余百分比 |
|
|
vfs.file.cksum[file] |
文件校验和(文件内容变化时值会变) |
vfs.file.cksum[/etc/passwd] → /etc/passwd校验和 |
(5)内存监控
|
Key格式 |
说明 |
示例 |
|---|---|---|
|
vm.memory.size[] |
内存容量(mode=类型) |
vm.memory.size[free] → 空闲内存字节数 |
|
mode=buffers → 缓冲区内存 |
vm.memory.size[buffers] → 缓冲区大小 |
|
|
mode=cached → 缓存内存 |
vm.memory.size[cached] → 缓存大小 |
2. 自带Key实战案例(8个常用场景)
以下案例基于node01服务器,直接调用自带Key创建监控项和图形,覆盖日常运维核心需求:
案例1:监控网卡流入/流出/总流量及错误包
-
进入主机→监控项→创建监控项,分别创建4个监控项:
-
名称:ens33流入流量;Key:net.if.in[ens33];单位:B;
-
名称:ens33流出流量;Key:net.if.out[ens33];单位:B;
-
名称:ens33总流量;Key:net.if.total[ens33];单位:B;
-
名称:ens33流入错误包;Key:net.if.in[ens33,errors];单位:个;
-
-
创建图形,将4个监控项添加到同一图形,可视化展示网卡状态。
案例2:监控/etc/passwd文件内容变化
-
创建监控项:
-
名称:/etc/passwd文件校验和;Key:vfs.file.cksum[/etc/passwd];
-
-
当文件内容被修改时,校验和会变化,可基于此创建告警(如文件被篡改时触发告警)。
案例3:监控FTP/HTTPD/MySQL/NTP服务状态
-
分别创建4个监控项(端口监听检测):
-
FTP(21端口):Key=net.tcp.listen[21];
-
HTTPD(80端口):Key=net.tcp.listen[80];
-
MySQL(3306端口):Key=net.tcp.listen[3306];
-
NTP(123端口,UDP):Key=net.udp.listen[123];
-
-
监控项取值:1=服务正常,0=服务异常,可基于此设置告警(取值为0时触发)。
案例4:监控/opt/data分区剩余空间
-
被监控端先创建分区并挂载(略);
-
创建监控项:
-
名称:/opt/data剩余空间百分比;Key:vfs.fs.size[/opt/data,pfree];单位:%;
-
-
创建图形,直观展示分区使用率变化。
案例5:监控apache/mysql用户启动的进程数
-
创建2个监控项:
-
apache用户进程数:Key=proc.num[,apache];单位:个;
-
mysql用户进程数:Key=proc.num[,mysql];单位:个;
-
案例6:监控httpd/mysql进程的CPU和内存占用
-
创建4个监控项:
-
httpd CPU使用率:Key=proc.cpu.util[httpd];单位:%;
-
httpd内存占用:Key=proc.mem[httpd];单位:KB;
-
mysql CPU使用率:Key=proc.cpu.util[mysql];单位:%;
-
mysql内存占用:Key=proc.mem[mysql];单位:KB;
-
案例7:监控物理内存剩余量、buffer/cache大小
-
创建3个监控项:
-
剩余内存:Key=vm.memory.size[free];单位:KB;
-
Buffer内存:Key=vm.memory.size[buffers];单位:KB;
-
Cache内存:Key=vm.memory.size[cached];单位:KB;
-
案例8:监控MySQL主从复制状态(IO/SQL线程+延迟)
-
确保被监控端(MySQL从库)已部署Zabbix Agent;
-
创建3个监控项(需MySQL授权Zabbix用户查看从库状态):
-
IO线程状态:Key=net.tcp.port[192.168.140.11,3306](基础检测);
-
进阶:结合自定义Key监控(见下文“自定义Key案例”);
-
复制延迟:Key=mysql.slave延时(需自定义Key,下文详解)。
-
三、自定义Key(满足个性化监控需求)
当自带Key无法满足需求时(如监控MySQL连接数、业务接口状态),可通过“自定义Key”实现——在被监控端定义Key与脚本/命令的关联,Zabbix Server通过Agent调用命令获取数据。
自定义Key基础配置规则
-
被监控端Agent配置文件(/etc/zabbix/zabbix_agentd.conf)需开启以下参数:
UnsafeUserParameters=1 # 允许Agent执行自定义命令(默认0,禁用) -
Key定义语法:
UserParameter=<key名称>,<shell命令/脚本路径><key名称>:自定义(如mysql.conn.number),支持带参数(如memory.size[*]);
<shell命令/脚本路径>:Agent执行的命令(需确保zabbix用户有执行权限)。
自定义Key实战案例
案例1:监控MySQL用户数
-
被监控端(已安装MySQL)配置自定义Key:
# 1. 编辑Agent配置文件 vim /etc/zabbix/zabbix_agentd.conf # 2. 添加自定义Key(开启unsafe参数+定义Key) UnsafeUserParameters=1 UserParameter=mysql.user.number,mysql -uroot -e "select count(*) from mysql.user" | sed '1d' # 说明: # mysql -uroot -e "..." → 执行SQL查询用户数; # sed '1d' → 去掉SQL结果的表头(仅保留数值)。 # 3. 重启Agent使配置生效 systemctl restart zabbix-agent # 4. 授权zabbix用户执行mysql命令(避免权限报错) echo"root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers # 测试环境临时授权(生产环境需精细化授权) -
Zabbix Server测试Key可用性(验证数据能否获取):
# 格式:zabbix_get -s 被监控端IP -k 自定义Key名称 zabbix_get -s 192.168.140.11 -k mysql.user.number # 预期输出:6(MySQL用户数,根据实际环境变化) -
Zabbix Web创建监控项:
-
名称:MySQL用户数;Key:mysql.user.number;单位:个;
-
数据类型:数字(无正负);
-
点击添加,即可在“最新数据”中查看MySQL用户数。


-
案例2:监控MySQL连接数
-
被监控端添加自定义Key:
vim /etc/zabbix/zabbix_agentd.conf UserParameter=mysql.conn.number,mysql -uroot -e "show processlist" | sed '1d' | wc -l # 说明:show processlist → 查看连接进程;sed '1d' → 去掉表头;wc -l → 统计行数(连接数) systemctl restart zabbix-agent -
Zabbix Server测试:
zabbix_get -s 192.168.140.11 -k mysql.conn.number
案例3:带参数的自定义Key(监控内存细分指标)
支持通过参数动态获取不同指标(如MemTotal、MemFree),灵活复用Key:
-
被监控端添加自定义Key:
vim /etc/zabbix/zabbix_agentd.conf UserParameter=memory.size[*], awk '/^$1:/{print $$2}' /proc/meminfo # 说明: # [*] → 表示Key带参数(如memory.size[MemTotal]); # $1 → 接收Key的第一个参数(如MemTotal); # $$2 → 输出awk匹配到的第二列(内存数值)。 systemctl restart zabbix-agent -
Zabbix Server测试(传入不同参数):
# 查看总内存(MemTotal) zabbix_get -s 192.168.140.11 -k memory.size[MemTotal] # 查看空闲内存(MemFree) zabbix_get -s 192.168.140.11 -k memory.size[MemFree] # 查看缓冲区内存(Buffers) zabbix_get -s 192.168.140.11 -k memory.size[Buffers]

案例4:监控MySQL主从复制线程状态(脚本实现)
通过脚本判断IO/SQL线程状态(Yes=1,No=0),便于设置告警:
-
被监控端(MySQL从库)创建检测脚本:
# 1. 创建脚本并赋予执行权限 cat > /opt/check_mysql_slave.sh << EOF #!/bin/bash # 接收参数(Slave_IO_Running 或 Slave_SQL_Running) state=\$(mysql -uroot -e "show slave status\G" | awk "/\$1:/{print \$2}") # 状态为Yes返回1,否则返回0 if [ \$state == "Yes" ]; then echo 1 else echo 0 fi EOF chmod +x /opt/check_mysql_slave.sh -
添加自定义Key:
vim /etc/zabbix/zabbix_agentd.conf UserParameter=mysql.slave[*],bash /opt/check_mysql_slave.sh $1 # 说明:$1 → 接收Key参数(如Slave_IO_Running) systemctl restart zabbix-agent -
Zabbix Server测试:

四、核心监控指标参考(MySQL/nginx/redis)
1. MySQL核心监控指标
|
指标类别 |
具体指标 |
监控方式 |
|---|---|---|
|
基础状态 |
服务端口(3306)、运行时长 |
自带Key(net.tcp.listen[3306]) |
|
资源占用 |
连接数、用户数、CPU使用率、内存占用 |
自定义Key(如mysql.conn.number) |
|
主从复制 |
IO线程状态、SQL线程状态、复制延迟 |
自定义Key(脚本实现) |
|
性能指标 |
慢查询数、事务提交数、查询缓存命中 |
自定义Key(调用mysqladmin extended-status) |
|
磁盘占用 |
数据目录剩余空间、二进制日志容量 |
自带Key(vfs.fs.size) |
2. nginx核心监控指标
|
指标类别 |
具体指标 |
监控方式 |
|---|---|---|
|
基础状态 |
服务端口(80/443)、进程数 |
自带Key(net.tcp.listen[80]、proc.num[nginx]) |
|
性能指标 |
活跃连接数、请求数/秒、4xx/5xx错误数 |
自定义Key(解析nginx访问日志或status模块) |
|
资源占用 |
CPU使用率、内存占用 |
自带Key(proc.cpu.util[nginx]) |
3. redis核心监控指标
|
指标类别 |
具体指标 |
监控方式 |
|---|---|---|
|
基础状态 |
服务端口(6379)、进程数 |
自带Key(net.tcp.listen[6379]) |
|
性能指标 |
连接数、命中率、命令执行数 |
自定义Key(redis-cli info) |
|
资源占用 |
CPU使用率、内存占用 |
自带Key(proc.cpu.util[redis]) |
|
数据状态 |
数据库键数量、过期键数量 |
自定义Key(redis-cli info keys) |
五、核心总结
-
Zabbix Agent是数据采集核心,支持“被动模式”(Server拉取)和“主动模式”(Agent推送),按需选择即可;
-
三种数据采集方式:模板(快速获取基础指标)、自带Key(标准化指标)、自定义Key(个性化需求),灵活组合效率最高;
-
自定义Key是核心扩展能力,支持直接调用命令或脚本,需注意授权zabbix用户执行权限,避免权限报错;
-
监控指标需结合业务场景选择,核心关注“可用性”(服务状态)、“资源占用”(CPU/内存/磁盘)、“性能”(连接数/响应时间)三类指标。
更多推荐



所有评论(0)