前言

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界面添加被监控主机

  1. 登录Zabbix Web→配置主机创建主机

  2. 填写主机信息:

    • 主机名称:node01.linux.com(与Agent配置的Hostname一致);

    • 可见名称:自定义(如“node01服务器”);

    • 群组:选择“Linux servers”(或自定义群组);

  3. 配置Agent接口:

    • 类型:Zabbix agent

    • IP地址:被监控端实际IP(如192.168.140.11);

    • 端口:10050(默认);

  4. 点击添加,完成主机创建。

3. 链接监控模板(快速获取基础指标)

模板是Zabbix预定义的监控项集合,链接后可自动采集CPU、内存等基础指标,无需手动创建:

  1. 进入刚创建的主机→模板链接新模板

  2. 在搜索框输入“Template OS Linux”→选中模板→点击添加

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

    图片

4. 创建图形(可视化监控数据)

  1. 进入主机→图形创建图形

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

  3. 点击添加→选择需展示的监控项(如“CPU使用率”“CPU空闲率”)→选择

  4. 点击更新,进入监测图形,即可查看可视化图表。

5. 创建聚合图形(多指标集中展示)

若需在一个页面展示多个图形(如CPU、内存、磁盘),可创建聚合图形:

  1. Zabbix Web→监测聚合图形创建聚合图形

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

  3. 点击添加→选择需添加的图形→选择

  4. 拖动图形调整位置,点击更新,即可查看聚合监控页面。

二、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:监控网卡流入/流出/总流量及错误包
  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];单位:个;

  2. 创建图形,将4个监控项添加到同一图形,可视化展示网卡状态。

案例2:监控/etc/passwd文件内容变化
  1. 创建监控项:

    • 名称:/etc/passwd文件校验和;Key:vfs.file.cksum[/etc/passwd];

  2. 当文件内容被修改时,校验和会变化,可基于此创建告警(如文件被篡改时触发告警)。

案例3:监控FTP/HTTPD/MySQL/NTP服务状态
  1. 分别创建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];

  2. 监控项取值:1=服务正常,0=服务异常,可基于此设置告警(取值为0时触发)。

案例4:监控/opt/data分区剩余空间
  1. 被监控端先创建分区并挂载(略);

  2. 创建监控项:

    • 名称:/opt/data剩余空间百分比;Key:vfs.fs.size[/opt/data,pfree];单位:%;

  3. 创建图形,直观展示分区使用率变化。

案例5:监控apache/mysql用户启动的进程数
  1. 创建2个监控项:

    • apache用户进程数:Key=proc.num[,apache];单位:个;

    • mysql用户进程数:Key=proc.num[,mysql];单位:个;

案例6:监控httpd/mysql进程的CPU和内存占用
  1. 创建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大小
  1. 创建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线程+延迟)
  1. 确保被监控端(MySQL从库)已部署Zabbix Agent;

  2. 创建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基础配置规则

  1. 被监控端Agent配置文件(/etc/zabbix/zabbix_agentd.conf)需开启以下参数:

    UnsafeUserParameters=1  # 允许Agent执行自定义命令(默认0,禁用)
    
  2. Key定义语法:

    UserParameter=<key名称>,<shell命令/脚本路径>
    
    • <key名称>

      :自定义(如mysql.conn.number),支持带参数(如memory.size[*]);

    • <shell命令/脚本路径>

      :Agent执行的命令(需确保zabbix用户有执行权限)。

自定义Key实战案例

案例1:监控MySQL用户数
  1. 被监控端(已安装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  # 测试环境临时授权(生产环境需精细化授权)
    
  2. Zabbix Server测试Key可用性(验证数据能否获取):

    # 格式:zabbix_get -s 被监控端IP -k 自定义Key名称
    zabbix_get -s 192.168.140.11 -k mysql.user.number
    # 预期输出:6(MySQL用户数,根据实际环境变化)
    
  3. Zabbix Web创建监控项:

    • 名称:MySQL用户数;Key:mysql.user.number;单位:个;

    • 数据类型:数字(无正负);

    • 点击添加,即可在“最新数据”中查看MySQL用户数。

案例2:监控MySQL连接数
  1. 被监控端添加自定义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
    
  2. Zabbix Server测试:

    zabbix_get -s 192.168.140.11 -k mysql.conn.number
    
案例3:带参数的自定义Key(监控内存细分指标)

支持通过参数动态获取不同指标(如MemTotal、MemFree),灵活复用Key:

  1. 被监控端添加自定义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
    
  2. 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),便于设置告警:

  1. 被监控端(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
    
  2. 添加自定义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
    
  3. 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)

五、核心总结

  1. Zabbix Agent是数据采集核心,支持“被动模式”(Server拉取)和“主动模式”(Agent推送),按需选择即可;

  2. 三种数据采集方式:模板(快速获取基础指标)、自带Key(标准化指标)、自定义Key(个性化需求),灵活组合效率最高;

  3. 自定义Key是核心扩展能力,支持直接调用命令或脚本,需注意授权zabbix用户执行权限,避免权限报错;

  4. 监控指标需结合业务场景选择,核心关注“可用性”(服务状态)、“资源占用”(CPU/内存/磁盘)、“性能”(连接数/响应时间)三类指标。

更多推荐