🌟常用内置键值
在 Zabbix 中,内置键值(Internal Item Key) 是 Zabbix Agent 或其他数据采集方式预定义的监控指标,用于采集主机、服务、应用、系统资源等的运行状态。这些键值可以直接用于监控项(Items)中,无需额外配置脚本。
🧰Zabbix Agent 常用内置键值(Linux)
📌 系统信息类
键值 | 说明 |
---|---|
system.uname |
获取系统信息(类似 uname -a ) |
system.uname[short] |
简短的主机名(类似 uname -n ) |
system.uname[release] |
内核版本(类似 uname -r ) |
system.uname[machine] |
硬件架构(如 x86_64) |
system.uname[version] |
内核发布版本 |
system.uname[sysname] |
系统名称(如 Linux) |
system.uname[nodename] |
主机名 |
system.uname[domainname] |
域名(如果支持) |
📌系统负载类
键值 | 说明 |
---|---|
system.load[all,avg1] |
1分钟平均负载 |
system.load[all,avg5] |
5分钟平均负载 |
system.load[all,avg15] |
15分钟平均负载 |
📌CPU 相关
键值 | 说明 |
---|---|
system.cpu.util[,user] |
用户态 CPU 使用率(%) |
system.cpu.util[,system] |
系统态 CPU 使用率(%) |
system.cpu.util[,idle] |
空闲 CPU 使用率(%) |
system.cpu.num |
CPU 核心数量 |
system.cpu.switches |
CPU 上下文切换次数 |
system.cpu.intr |
中断数量 |
📌内存相关
键值 | 说明 |
---|---|
vm.memory.size[total] |
总内存大小(单位:字节) |
vm.memory.size[free] |
空闲内存 |
vm.memory.size[used] |
已使用内存 |
vm.memory.size[available] |
可用内存(Linux 特有) |
vm.memory.utilization |
内存使用率(%) |
📌磁盘 IO 相关
键值 | 说明 |
---|---|
system.uname |
获取系统信息(类似 uname -a ) |
vfs.dev.read.bytes[device] |
指定设备的读取字节数 |
vfs.dev.write.bytes[device] |
指定设备的写入字节数 |
vfs.dev.read.ops[device] |
指定设备的读取操作数 |
vfs.dev.write.ops[device] |
指定设备的写入操作数 |
示例:
vfs.dev.read.bytes[sda]
📌文件系统相关
键值 | 说明 |
---|---|
vfs.fs.size[/,total] |
根分区总大小 |
vfs.fs.size[/,free] |
根分区空闲大小 |
vfs.fs.size[/,used] |
根分区已使用大小 |
vfs.fs.size[/,pfree] |
根分区空闲百分比 |
vfs.fs.size[/,pused] |
根分区使用百分比 |
vfs.fs.inode[/,free] |
根分区 inode 空闲数量 |
vfs.fs.inode[/,used] |
根分区 inode 已使用数量 |
vfs.fs.inode[/,pfree] |
根分区 inode 空闲百分比 |
可以替换
/
为其他挂载点,如/home
、/var/log
等。
📌网络相关
键值 | 说明 |
---|---|
net.if.in[eth0] |
eth0 接口接收的数据量(字节) |
net.if.out[eth0] |
eth0 接口发送的数据量(字节) |
net.if.in[eth0,bytes] |
eth0 接口接收的字节数 |
net.if.out[eth0,bytes] |
eth0 接口发送的字节数 |
net.tcp.listen[port] |
检查指定端口是否在监听(如 net.tcp.listen[80] ) |
net.tcp.port[,80] |
检查本地是否在监听 80 端口(返回 0 或 1) |
📌进程相关
键值 | 说明 |
---|---|
proc.num |
当前运行的进程数 |
proc.num[nginx] |
nginx 进程数量 |
proc.num[nginx,,run] |
正在运行的 nginx 进程数量 |
proc.mem[nginx] |
nginx 进程使用的内存大小 |
proc.cpu.util[nginx] |
nginx 进程的 CPU 使用率(%) |
✅如何查看所有内置键值?
你可以通过以下方式查看所有可用的内置键值:
- Zabbix Web 界面:
- 创建或编辑监控项时,在“键值”字段点击下拉箭头,可以看到所有可用键值。
- Zabbix Agent 端执行命令:
zabbix_agentd -t "system.uname"
或查看所有支持的键值:
zabbix_agentd -t
🌟zabbix自定义监控
📐无参数的键值
- 遇到zabbix模板中内有的内容,进行监控,使用zabbix自定义监控功能
- 只要命令或脚本获取的内容,就可以自定义监控
- 客户端创建对饮的key值
- 客户端修改子配置文件
- 服务端检查ke是否可用
- 前端页面配置:创建监控项,添加key,添加触发器,添加图形
🍀自定义监控完整流程
- 选择1台机器,配置测试自定义监控
- 客户端:命令,脚本获取到指定的指标,写入到zabbix agent子配置文件中
- 服务端:使用zabbix_get -s ip -k key名字 测试
- web页面添加监控项,触发器(可选),图形(可选)
- web页面创建模板
- 复制监控项,触发器(可选),图形(可选)到模板中
- 分发子配置文件到所有主机上
- 模板与主机关联
- 测试
获取僵尸进程命令
top -bn1 | awk 'NR==2{print $(NF-1)}'
客户端修改子配置文件
vim /etc/zabbix/zabbix_agent2.d/sys.conf
UserParameter=key名字,对应的命令或脚本
UserParameter=sys.zombie,top -bn1 | awk 'NR==2{print $(NF-1)}'
systemctl restart zabbix-agent2.service
服务端测试(进入zabbix-server容器测试)
1.进入zabbix-server容器
docker-compose exec -it zbx_serve /bin/bash
2.测试
zabbix_get -s 172.16.1.7 -k sys.zombie
-s:指定主机
-k:指定key名字
前端页面添加监控项
🧩带有参数的键值
- 监控指定端口连接数(已经建立连接)
- 检查公网方向的端口,连接数
- 检查用户是否异地登录
获取指定端口连接数命令
ss -ant | grep -i estab | grep ":22" | wc -l
检查root用户登录的ip
lastlog -u root | awk 'NR==2{print $$3}'
修改客户端子配置文件
UserParameter=sys.port.conn[*],ss -ant | grep -i estab | grep ":$1" | wc -l
UserParameter=user.login.ip[*],lastlog -u root | awk 'NR==2{print $$3}'
*:表示所有参数
$1:表示[]中的第一参数
注意这里有个坑:当需要使用awk取列时,需要使用$$3来表示取第三列
systemctl restart zabbix-agent2.service
进入zabbix-server容器测试
zabbix_get -s 172.16.1.7 -k sys.port.conn[22]
zabbix_get -s 172.16.1.7 -k user.login.ip[root]
前端页面添加监控项
💡添加触发器
前端页面添加
客户端制造僵尸进程
使用其他的主机登录web01
前端监控页面查看
🌏监控图形
创建图表
查看图形
💾监控模板
- 监控项
- 触发器
- 图形
- 关联模板
如何把自定义监控应用到所有机器
- 创建模板
- 复制监控项
- 复制触发器
- 复制图形
- 查看模板
- 模板与主机关联
- 检查监控项,由于对应的主机还没有定义键值,所有会显示不支持
- 客户端配置文件批量分发(自定义键值)
cat >>/etc/zabbix/zabbix_agent2.d/sys.conf <<'EOF'
UserParameter=sys.zombie,top -bn1 | awk 'NR==2{print $(NF-1)}'
UserParameter=sys.port.conn[*],ss -ant | grep -i estab | grep ":$1" | wc -l
EOF
🌟自定义监控故障
💡awk取列的问题
- $有特殊含义,
UserParameter=user.log.ip[*],lastlog -u "$1" | awk 'NR==2{print $$3}'
💡zabbix用户权限问题
客户端都是zabbix用户运行脚本或命令
出现一些权限类问题
解决方案:
1.修改用户为root
2.给zabbix用户配置sudo权限
/etc/sudoers
zabbix ALL=(ALL) NOPASSWD:ALL
UserParameter=new.key,sudo 命令或脚本
🌟自动发现配置
🍟配置自动发现规则
🍅创建群组
🍓创建发现动作
🔍查看主机
总结
自定义监控
- 无参数
- 有参数
自定义监控与模板
故障案例:取列问题,权限问题,运行时间
自动发现
目标
- 监控网站集群(前后端)
- ansible部署客户端,自定义监控项配置,启动服务
- 配置自动发现