day59-可观测性建设-zabbix自定义监控项

发布于:2025-07-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

🌟常用内置键值

在 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 使用率(%)

✅如何查看所有内置键值?

你可以通过以下方式查看所有可用的内置键值:

  1. Zabbix Web 界面
    • 创建或编辑监控项时,在“键值”字段点击下拉箭头,可以看到所有可用键值。

  1. 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部署客户端,自定义监控项配置,启动服务
    • 配置自动发现


网站公告

今日签到

点亮在社区的每一天
去签到