Zabbix自动扫描&&注册

Zabbix自动扫描&&注册
[TOC]
SNMP
什么是 SNMP?(故事背景)
想象一下,Zabbix 是一个**“总公司的巡查大老板”** 而你的网络设备(交换机、路由器、打印机等)是**“分布在各地的分公司”**
SNMP 就是**“总公司”和“分公司”之间约定好的一套沟通语言(协议)**
- 如果没有 SNMP,Zabbix 这个大老板根本听不懂交换机在说什么
- 也不知道怎么问它“你现在忙不忙?”
- 有了 SNMP,Zabbix 就可以用这种通用的语言去问设备:
- “嘿,兄弟,你现在CPU利用率多少?内存还剩多少?”
总结: SNMP 就是 Zabbix 监控网络设备时使用的“普通话”
关键角色
在 SNMP 的世界里,有三个重要的小角色,缺一不可:
- Manager(管理站): 就是 Zabbix 服务器
- 它是发号施令的人,负责问问题(比如:“告诉我现在的流量”)
- Agent(代理): 安装在 网络设备(交换机/路由器)里的一个小软件或小模块
- 它负责听 Zabbix 的话,去查数据,然后汇报回去
- MIB(管理信息库): 这是一个**“数据字典”或“账本”**
- Agent 查到的所有数据(CPU、内存、流量)都记在这个账本里
OID vs MIB

想象一棵大树(MIB 树)
你的拓扑图就是一棵树
- 树根是 ==.==
- 树枝分叉代表不同的设备类型(Windows, 交换机, Linux)
- 再往下分叉是具体的指标(CPU, 磁盘, 内存)
什么是 OID?(IP地址) OID: 获取交换机内存空闲值表示方式为 .1.2.3.2
- 这就像你在地图上找路:
- 先去
.1号城市(根节点) - 再去
.2号区(交换机路由器) - 再去
.3号街道(内存等信息) - 最后去
.2号房间(空闲内存)
- 先去
- Zabbix 只认这一串数字
- Zabbix 问交换机:“请告诉我
.1.2.3.2是多少?” - 交换机就会回答:“是 500MB”
- Zabbix 问交换机:“请告诉我
什么是 MIB?(域名)
那一串数字 .1.2.3.2 太难记了,人类记不住
所以 MIB 就是给这串数字起了个**“人类能看懂的名字”**,比如 NetworkMemorySize
- Zabbix 干活时用的是 OID(数字)(IP地址)
- 你配置的时候看的是 MIB(名字)(域名)
⚠️==它们指的是同一个东西==
轮询 vs 主动报警
Zabbix 是怎么监控网络设备的?
监控过程通常有两种模式:
1️⃣模式一:Zabbix 主动去问(轮询)
- 用
161端口(==网络设备监听==)
这是最常用的方式
- Zabbix (Manager) 每隔几分钟就发个消息给 交换机 (Agent):“喂,把
.1.2.3.1(内存使用)和.1.2.3.2(内存空闲)的数据报上来!” - 交换机 查一下自己的 MIB 账本,把数据发回给 Zabbix
- Zabbix 拿到数据,画成图表给你看
2️⃣模式二:交换机主动报警(Trap)
- 用
162端口(==Zabbix监听==)
有时候 Zabbix 没空一直问,或者交换机想立刻求救
- 交换机 发现风扇坏了,或者温度过高
- 它主动发个消息给 Zabbix:“救命啊!我着火了!”
- Zabbix 收到后,立刻给你发邮件报警
| 端口 | 谁在监听这个端口? | 谁在连接这个端口? | 动作方向 | 形象比喻 |
|---|---|---|---|---|
| UDP 161 | 被监控设备 | Zabbix 服务器 | Zabbix ➡️ 设备 | 查水表 抄表员(Zabbix)去敲**你家门(161)**查数 |
| UDP 162 | Zabbix 服务器 | 被监控设备 | 设备 ➡️ Zabbix | 按门铃 家里着火了(设备),你跑去**按 Zabbix 的门铃(162)**报警 |
防火墙怎么配?
- 在交换机/路由器上:
- 你需要开放 UDP 161 端口(入站),允许 Zabbix 来访问
- (通常不需要开放 162,因为交换机是往外发 Trap,不是接收)
- 在 Zabbix 服务器上:
- 你需要开放 UDP 162 端口(入站),允许交换机来报警
- (通常不需要开放 161,因为 Zabbix 是往外发请求,不是接收)
版本对比
| 特性 | SNMP v1 | SNMP v2c (最常用) | SNMP v3 (最安全) |
|---|---|---|---|
| 安全等级 | 🔴 低 (几乎裸奔) | 🟡 中 (稍微好点) | 🟢 高 (全副武装) |
| 验证方式 | 团体名 (Community String) ==类似一个简单的密码== | 团体名 支持更复杂的错误提示 | 用户名 + 认证 + 加密 需要账号、密码和加密密钥 |
| 是否加密 | ❌ 不支持 | ❌ 不支持 | ✅ 支持 (数据加密传输) |
| 主要缺点 | 安全性极差,数据容易被截获 | 依然是明文传输,容易被抓包看到密码 | 配置最复杂,消耗设备CPU资源稍多 |
| 小白建议 | 别用,太老了 | 首选 (内网监控推荐) 配置简单,兼容性好 | 内网安全要求极高时用 防止敏感数据泄露 |
客户端安装
- 在被监控设备上开启 SNMP:
- 登录你的交换机/路由器,开启 SNMP 功能。
- 设置一个团体名(Community String)。。。。
- 在 Zabbix 上添加主机:
- 告诉 Zabbix 这个设备的 IP 地址。
- 告诉 Zabbix 刚才设置的团体名(密码)。
- 关联一个模板(Template)。模板里已经写好了各种 OID(比如监控CPU的OID,监控流量的OID),你直接用就行,不用自己一个个手写
1)客户端安装[root@Client ~]# yum -y install net-snmp# 默认就是v2c 版本的
2)设置团体名'这就相当于“密码”'# Zabbix 必须知道这个密码,交换机才肯理它通常默认是 `public`(只读)或 `private`(读写)[root@Client ~]# vim /etc/snmp/snmpd.confcom2sec notConfigUser 192.168.88.99 passwd# 来源IP为zabbix; 自定义为passwd(密码)...view systemview included .1...group notConfigGroup v1 notConfigUsergroup notConfigGroup v2c notConfigUser# 这两行都写上,就是为了“通吃”,保证兼容性组名 版本号 用户名(安全名)com2sec notConfigUser default public ...com2sec notConfigUser 192.168.88.99 passwdcom2sec:这是指令- 意思就是把 Community 字符串映射成一个 Security Name(安全名)
notConfigUser:这是映射后的安全名- 随便起的==别名==,但在后面的配置里要用到
default:这是来源地址default代表允许任意 IP(0.0.0.0/0)使用这个密码来连接- 建议:为了安全,最好把
default改成你 Zabbix 服务器的具体 IP
passwd:这就是你自定义的团体名(密码)
view systemview included .1.3.6.1.2.1.1view systemview included .1.3.6.1.2.1.25.1.1 ...'默认写法'view systemview included .1- 原来的写法(默认配置):
系统默认只给你开了两个“小窗口”
.1.3.6...1是系统基本信息(比如设备名字、描述).1.3.6...25.1.1是系统运行时间等…- 缺点: 如果你用 Zabbix 想监控 CPU 使用率、网卡流量、硬盘空间,默认配置是不让你看的,Zabbix 会报错“无权限”或“无数据”
- 你修改后的写法(.1):
.1代表整棵树的树根- 效果: 你把大门彻底打开了!告诉 SNMP:“Zabbix 想要什么数据,整个树下的所有数据(CPU、内存、流量、温度等)全部开放给它看”
[root@Client ~]# systemctl enable --now snmpdCreated symlink '/etc/systemd/system/multi-user.target.wants/snmpd.service' → '/usr/lib/systemd/system/snmpd.service'.[root@Client ~]# ss -lntup | grep :161udp 0.0.0.0:161 users:(("snmpd",pid=45781,fd=6))# 模仿网络设备,监听161端口zabbix(服务端)安装
1)安装[root@Zabbix ~]# yum -y install net-snmp-utils'工具包'-->无需启动,可以直接使用
2)测试[root@Zabbix ~]# snmpwalk -v2c -c passwd 10.0.0.102 SysNameTimeout: No Response from 10.0.0.102⚠️我们客户端的配置中,指定了来源IP为192.168.88.99'很明显10.xxx肯定是错的-->它的来源IP为10.0.0.99'[root@Zabbix ~]# snmpwalk -v2c -c passwd 192.168.88.102 SysNameSNMPv2-MIB::sysName.0 = STRING: Client✅️改为内网IP就行了,SysName-->主机名[root@Zabbix ~]# snmpwalk -v2c -c passwd 192.168.88.102 .1.3.6.1.2.1.25.2.2.0HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 1975388 KBytes# 这串数字代表内存资源| 监控指标 | 常用 OID (前缀) | 含义与用途 | 备注 |
|---|---|---|---|
| 系统描述 | .1.3.6.1.2.1.1.1 | sysDescr 设备型号、软件版本信息 | 用来识别这是台什么设备 |
| 系统运行时间 | .1.3.6.1.2.1.1.3 | sysUpTime 设备启动多久了 | 单位通常是百分之一秒 |
| 接口描述 | .1.3.6.1.2.1.2.2.1.2 | ifDescr 网卡名字 (如 GigabitEthernet0/1) | 非常重要,用来对应端口 |
| 接口状态 | .1.3.6.1.2.1.2.2.1.8 | ifOperStatus 端口是 UP(1) 还是 DOWN(2) | 监控端口通断的核心 |
| 入站流量 | .1.3.6.1.2.1.2.2.1.10 | ifInOctets 网卡接收的总字节数 | 监控下载速度用这个 |
| 出站流量 | .1.3.6.1.2.1.2.2.1.16 | ifOutOctets 网卡发送的总字节数 | 监控上传速度用这个 |
| CPU 使用率 | .1.3.6.1.4.1.2011... | 厂商私有 OID 不同品牌不一样 | 华为通常是 .1.3.6.1.4.1.2011 开头 |
| 内存使用 | .1.3.6.1.2.1.25.2 | hrMemory 内存总量/使用量 | 你刚才查的就是这一类 |
web页面配置




自动发现
- 把之前添加的都删除掉!
Zabbix服务端,通过扫描地址段的方式,自动发现"存活"的主机一旦发现,它就会根据预设的“动作”自动执行一系列操作 1.添加主机 2.关联群组 2.关联模版从而省去手动一台台添加的繁琐工作=============================缺点: 1.扫描压力大,非常消耗资源,会导致 Zabbix Server 的负载飙升 2.模板匹配“一刀切”-->所有客户端模版相同'不同的设备进行--->网段分离'✅️每个网段给不同的模板✅️把“大网段扫描”拆解成“小范围定向扫描”
- 觉得慢, 可以把更新间隔--->改为1m



[root@Zabbix ~]# systemctl restart zabbix'可以试着重启一下-->自动发现'
[root@Zabbix ~]# tail -f /tmp/zabbix_server.log17199:20260414:222834.496 server #17 started [discoverer #1]'✅️discoverer #1 就是专门负责跑“自动发现规则”的进程'...... 17218:20260414:222935.588 enabling Zabbix agent checks on host "192.168.88.102": interface became available 17214:20260414:222935.600 enabling Zabbix agent checks on host "192.168.88.101": interface became available- 动作:
enabling Zabbix agent checks(启用 Zabbix 客户端检查)- 这说明你的“动作”配置生效了,Zabbix 已经把这两台机器当作正式主机,并开启了监控项
- 对象:
192.168.88.101和102- 这就是你 IP 范围里扫出来的机器
- 原因:
interface became available- 说明 Zabbix 尝试连接它们的 10050 端口成功了,确认 Agent 在线
自动注册
客户端主动将自身信息上传给服务端,用来减少服务端的压力"根据需求调整模式"📌 因此:被动模式(Passive):✅️"默认启用" Zabbix server 主动连接 agent 获取数据;主动模式(Active): Agent 主动连接 server 上报数据1.当服务器超过 300–500+ 台以上→ 推荐用主动模式# 减少服务端压力2.当网络复杂(如跨防火墙、NAT)→ 优先用主动模式# Agent 主动出站,更易通过防火墙1)修改配置文件[root@Client ~]# vim /etc/zabbix/zabbix_agentd.confServer=192.168.88.99# 被动模式(保留,允许 server 拉取)ServerActive=192.168.88.99# 主动模式(启用,用于自动注册 + 主动上报)Hostname=Client# 主机名(必须与 Zabbix 中预期名称一致)'Zabbix服务端web页面设置的必须一致'
2)重启生效[root@Client ~]# systemctl restart zabbix-agent'另台机器也是一样的'- Zabbix 的主动模式和被动模式不是“二选一”,而是可以同时工作、互不冲突
- 非互斥,而是互补
📌 Zabbix 会根据==监控项的类型==决定使用哪种模式
- 自动注册阶段:必须靠 主动模式(因为 agent 要主动“报到”);
- 后续监控阶段:
- 如果模板/主机中配置了 主动式监控项 → Agent 主动上报;
- 如果配置了 被动式监控项 → Server 主动拉取==(默认)==(Zabbix客户端)

监控项设计
“按监控项的重要性与可靠性需求,动态选择通信模式:
- 关键指标(高可用、故障敏感)→ 被动模式(Server 主动轮询)
- 非关键/高频/批量指标 → 主动模式(Agent 自主上报)”
💡 “服务是否存活、负载、内存、CPU” —— 这些正是必须用被动模式保障快速故障检测的关键指标!
- 因为:如果 agent 崩溃或网络中断
- 被动模式会在几秒内触发“无数据”告警
- 而主动模式可能要等 1~2 分钟才被发现
✅ 同一台主机,混合使用两种类型——这才是真正的“智能监控”
- web页面设置
-
先把上面做的
自动发现的相关配置停用- 两个设置都停用
-
删除现有的客户端


[root@Zabbix ~]# tail -f /tmp/zabbix_server.log17221:20260415:085308.766 cannot send list of active checks to "192.168.88.101": host [Client02] not found 17229:20260415:085315.504 cannot send list of active checks to "192.168.88.102": host [Client] not found .....❌️刚开始没有找到,后面才找到并添加 # 客户端(Client02 和 Client)以 主动模式(Active) 向 Zabbix server 请求监控项列表,但此时 Zabbix 数据库中还没有这两个主机 17215:20260415:085330.196 enabling Zabbix agent checks on host "Client": interface became available 17218:20260415:085331.185 enabling Zabbix agent checks on host "Client02": interface became available


- 我们批量更新一下我们自定义模版中监控项的==模式==
- 更改后, 我们可以直观的看出效果






- ==有冲突==, 你现在所有的监控项都是**“主动模式(Active)”**
- 联通性,也就是可用性就==直接都灰了==

- 改回来, 监控项有轮询的--->联通性就亮了

- 这样就恢复正常了!
- 所以我们第一次添加主机设备的时候
- 监控项一定要有轮询的
- 故模版往往是--->Linux by Zabbix agent✅️
- 这样==联通性==就绿了🥬
Zabbix Proxy(代理)
你可以把整个监控系统想象成一家大公司:
- Zabbix Server 就是 总公司,负责制定监控策略、查看所有数据、发出警报
- 被监控的服务器 就是分布在全国各地的 员工
- Zabbix Proxy 就是 区域经理
如果没有“区域经理”(Proxy)
所有“员工”(服务器)都要直接向“总公司”(Server)汇报工作
当员工数量成千上万时,总公司会被海量的汇报信息淹没,导致效率低下甚至瘫痪

这时,“区域经理”(Proxy)的作用就体现出来了:
- 分担工作:总公司把某个区域(比如一个机房或一个城市)的管理权交给区域经理
- 收集信息:这个区域的员工只向自己的区域经理汇报
- 统一上报:区域经理收集好所有员工的信息后,再统一、定期地汇报给总公司
📝 核心作用总结
- 减轻 Server 负担:这是最主要的目的
- Proxy 代替 Server 去收集数据
- 让 Server 能更专注于核心任务,比如数据处理和告警
- 简化网络配置:只需要 Proxy 和 Server 之间建立一条连接即可
- 不需要为每个服务器都开防火墙规则
- 适用于分布式场景:特别适合监控跨地域、多机房、网络环境复杂的场景
最后,还有一个重要的警告:Proxy 的数据库必须和 Server 的数据库分开,否则可能会导致 Server 的数据损坏
这就像区域经理要有自己独立的档案室,不能和总公司的混在一起
'新克隆一台机器'[root@Proxy tmp]# ll-rw-r--r-- 1 root root 859596800 Apr 15 13:59 mysql-8.0.36-1.el9.x86_64.rpm-bundle.tar-rw-r--r-- 1 root root 41429846 Apr 15 13:59 zabbix-6.0.45.tar.gz
1)解压[root@Proxy tmp]# tar -zxf zabbix-6.0.45.tar.gz -C /soft/[root@Proxy tmp]# tar -xf mysql-8.0.36-1.el9.x86_64.rpm-bundle.tar
2)安装MySQL[root@Proxy tmp]# dnf install -y \> mysql-community-common-8.0.36-1.el9.x86_64.rpm \> mysql-community-icu-data-files-8.0.36-1.el9.x86_64.rpm \> mysql-community-libs-8.0.36-1.el9.x86_64.rpm \> mysql-community-client-plugins-8.0.36-1.el9.x86_64.rpm \> mysql-community-client-8.0.36-1.el9.x86_64.rpm \> mysql-community-server-8.0.36-1.el9.x86_64.rpm \> mysql-community-devel-8.0.36-1.el9.x86_64.rpm[root@Proxy tmp]# systemctl enable --now mysqld
3)数据库设置[root@Proxy tmp]# cat /var/log/mysqld.log | grep root@local2026-04-15T06:17:20.236396Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: e>MQ_g7n1+u2[root@Proxy tmp]# mysql -uroot -p'e>MQ_g7n1+u2'mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Oldboy123.com';Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL validate_password.length = 6;Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL validate_password.policy = 0;Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'passwd';Query OK, 0 rows affected (0.00 sec)
mysql> create database zabbix character set utf8 collate utf8_bin;Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> create user 'zabbix'@'localhost' identified by 'passwd';Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password by 'passwd';Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost' ;Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL log_bin_trust_function_creators = 1;Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)
mysql> exitBye
4)导入表结构[root@Proxy tmp]# cd /soft/zabbix-6.0.45/database/mysql[root@Proxy mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sqlmysql: [Warning] Using a password on the command line interface can be insecure.
5)编译安装[root@Proxy mysql]# cd /soft/zabbix-6.0.45/[root@Proxy zabbix-6.0.45]# dnf -y install libxml2 libxml2-devel net-snmp-devel curl-devel libevent-devel# 下载依赖[root@Proxy zabbix-6.0.45]# cd /usr/lib64/pkgconfig/[root@Proxy pkgconfig]# ln -s libpcre2-8.pc libpcre2.pc[root@Proxy pkgconfig]# cd -/soft/zabbix-6.0.45[root@Proxy zabbix-6.0.45]# ./configure --enable-proxy --with-net-snmp --with-mysql --with-libpcre2# 不需要安装服务端模块,和客户端模块✅️只需要 安装代理模块&&数据库模块========================================# 带大家检查一下!Enable server: noWith database: MySQLSNMP: yesnable proxy: yesEnable agent: no[root@Proxy zabbix-6.0.45]# zabbix_zabbix_js zabbix_proxy
6)修改配置文件[root@Proxy zabbix-6.0.45]# cd /usr/local/etc/[root@Proxy etc]# lltotal 28-rw-r--r-- 1 root root 24752 Apr 15 14:46 zabbix_proxy.confdrwxr-xr-x 2 root root 6 Apr 15 14:46 zabbix_proxy.conf.d'这些都是proxy代理的配置文件'[root@Proxy etc]# vim zabbix_proxy.confDBHost=localhostDBName=zabbixDBUser=zabbixDBPassword=passwdServer=10.0.0.99# 和Zabbix Server得能够通信,处于同一网段# web页面中,配置的也得是这个网段Hostname=sh_proxy# 和Zabbix Server对应即可!# 不一定是👇这个主机名
7)创建zabbix的虚拟用户# 名称固定,必须是它[root@Proxy etc]# zabbix_proxyzabbix_proxy [17954]: user zabbix does not existzabbix_proxy [17954]: cannot run as root![root@Proxy etc]# id zabbixid: ‘zabbix’: no such user[root@Proxy etc]# groupadd -g 777 zabbix[root@Proxy etc]# useradd -g 777 -u 777 -s /sbin/nologin -M zabbix[root@Proxy etc]# id zabbixuid=777(zabbix) gid=777(zabbix) groups=777(zabbix)
8)启动[root@Proxy etc]# zabbix_proxy# 因为是编译安装,不能systemd启动'当然你也可以编写service文件'[root@Proxy etc]# netstat -lntup | grep zabbix_proxy0 0.0.0.0:10051 LISTEN 17967/zabbix_proxy- web页面创建
Proxy代理

强烈建议你在实际生产环境中选择【主动式】
为什么推荐【主动式】
- 防火墙友好:
- 让 Proxy 主动连 Server(出方向)比让 Server 去连成百上千个 Proxy(入方向)更容易配置防火墙
- 性能更好:
- 被动模式下,Server 需要维护到所有 Proxy 的连接,压力较大
- 主动模式下,Server 只需要接收数据,压力分担到了 Proxy 端
'修改两台客户端的配置'# 删除web页面的客户端&&停用自动发现,注册功能[root@Client02 ~]# vim /etc/zabbix/zabbix_agentd.confServer=192.168.88.103ServerActive=192.168.88.103# 先主动上传给Proxy代理Hostname=web01Hostname=web02'名称和web页面中保持一致即可!'[root@Client02 ~]# systemctl restart zabbix-agent'另一台机器省略'
[root@Proxy etc]# pkill zabbix_proxy[root@Proxy etc]# netstat -lntup | grep zabbix_proxy'先杀死进程,再启动一遍'[root@Proxy etc]# zabbix_proxy[root@Proxy etc]# netstat -lntup | grep zabbix_proxy0 0.0.0.0:10051 LISTEN 18099/zabbix_proxy
[root@Zabbix ~]# tail -f /tmp/zabbix_server.log# 服务端日志sending configuration data to proxy "sh_proxy" at "10.0.0.103", datalen 30644, bytes 4850 with compression ratio 6.3# 这种就是Zabbix连上代理服务器了Proxy了添加主机
Zabbix Server <--- Zabbix Proxy (主动模式) ---> Zabbix Agent (被动模式)
Proxy 与 Agent 之间==通常==是“Proxy 轮询 Client”(即被动模式)
- 模版选择
Linux by Zabbix agent✅️
Linux by Zabbix agent active❌️
- 里面的监控项都是**“主动模式(Active)”**
- 通常会有==联通性问题==
只是第一次添加时—>会有联通性问题🚫
后面只要==主机名称==配置好后, 并且联通性绿了🥬
客户端也可以 以**“主动模式(Active)”**运行的
- 名称
'尽量和zabbix_agentd.conf中的Hostname保持一致'Hostname=web01Hostname=web02======================🌰举个反例
- 名称随便起的
aaabbb
[root@Proxy ~]# pkill zabbix_proxy[root@Proxy ~]# zabbix_proxy'代理重启'
[root@Zabbix ~]# tail -f /tmp/zabbix_server.log22287:20260415:192528.446 sending configuration data to proxy "sh_proxy" at "10.0.0.103", datalen 22563, bytes 3805 with compression ratio 5.9✅️说明代理连接上了'服务端日志!'
[root@Proxy ~]# tail -f /tmp/zabbix_proxy.log19344:20260415:192529.472 enabling Zabbix agent checks on host "aaaa": interface became available 19344:20260415:192529.473 enabling Zabbix agent checks on host "bbbb": interface became available✅️说明接口联通性可以了 '代理日志'
[root@Client ~]# systemctl restart zabbix-agent[root@Client02 ~]# systemctl restart zabbix-agent'重启客户端'[root@Proxy ~]# tail -f /tmp/zabbix_proxy.log19323:20260415:192852.417 cannot send list of active checks to "192.168.88.101": host [web01] not found 19321:20260415:192854.791 cannot send list of active checks to "192.168.88.102": host [web02] not found# 代理的日志...找不到web01和web02# 对不上Hostname'虽然名称对不上!但是依旧可以监控到数据!!!'# IP地址在发力!⚠️这个时候你的主机名称对不上Hostname🐴客户端没法以“主动模式(Active)”运行的
- 我们试着改一下模式, 加一个主动Active的监控项

- 等了一个周期就是没有数据
- 主机名称对不上!!!


[root@Proxy ~]# pkill zabbix_proxy[root@Proxy ~]# zabbix_proxy# 重启代理服务器
[root@Client02 ~]# systemctl restart zabbix-agent[root@Client ~]# systemctl restart zabbix-agent# 重启客户端
'代理Proxy的日志里面再也没有'host [web01] not foundhost [web02] not found'对应的客户端配置文件中的Hostname'-->得和web上保持一致!# 并非真的主机名[root@Client02 ~][root@Client ~]
- 印证了—>客户端也可以 以**“主动模式(Active)”**运行的
- 需要重启
Proxy代理&&客户端
- 需要重启


- 重启
Proxy代理&&客户端
[root@Proxy ~]# tail -f /tmp/zabbix_proxy.log'添加成功!'enabling Zabbix agent checks on host "web01": interface became availableenabling Zabbix agent checks on host "web02": interface became available
监控java项目
JMX协议
[root@Client01 ~]# cd /server/tmp/[root@Client01 tmp]# ll-rw-r--r-- 1 root root 13049663 Dec 31 20:52 apache-tomcat-9.0.113.tar.gz-rw-r--r-- 1 root root 170023183 Dec 31 20:53 jdk-8u181-linux-x64.rpm[root@Client01 tmp]# rpm -ivh jdk-8u181-linux-x64.rpm...[root@Client01 tmp]# java -versionjava version "1.8.0_181"[root@Client01 tmp]# tar xf apache-tomcat-9.0.113.tar.gz -C /soft/[root@Client01 tmp]# ll /soft/total 4drwxr-xr-x 9 root root 4096 Apr 15 21:36 apache-tomcat-9.0.113[root@Client01 tmp]# ln -s /soft/apache-tomcat-9.0.113/ /soft/tomcat[root@Client01 tmp]# ll /soft/total 4drwxr-xr-x 9 root root 4096 Apr 15 21:36 apache-tomcat-9.0.113lrwxrwxrwx 1 root root 28 Apr 15 21:36 tomcat -> /soft/apache-tomcat-9.0.113/[root@Client01 tmp]# cd /soft/tomcat/bin/[root@Client01 bin]# vim setenv.sh#!/bin/shexport CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=192.168.88.101"export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=12345"export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"-
-Dcom.sun.management.jmxremote- 开启 JMX 远程管理功能的开关
-
-Djava.rmi.server.hostname=172.xxx- 非常重要--->指向本机真实且对外可访问的 IP 地址
- 这里是 192.168.88.101 ==私网==
- 非常重要--->指向本机真实且对外可访问的 IP 地址
-
-Dcom.sun.management.jmxremote.port=12345- 指定 JMX 监听的端口号
-
-Dcom.sun.management.jmxremote.ssl=false- 禁用 SSL 加密
-
-Dcom.sun.management.jmxremote.authenticate=false- 禁用身份验证(免密登录)
[root@Client01 bin]# /soft/tomcat/bin/startup.sh...Using CATALINA_OPTS: -Dcom.sun.management.jmxremote...'看到我们刚才添加的选项就是正确的了'[root@Client01 bin]# netstat -lnutp | grep java:::34701 LISTEN 131370/java:::8080 LISTEN 131370/java127.0.0.1:8005 LISTEN 131370/java:::12345 LISTEN 131370/java:::38035 LISTEN 131370/java'必须有8080 && 12345端口'配置Java网关

'zabbix服务端配置'[root@Zabbix ~]# vim /usr/local/etc/zabbix_server.confJavaGateway=10.0.0.102# 这里用.102作为网关了# 相当于公网JavaGatewayPort=10052StartJavaPollers=2[root@Zabbix ~]# systemctl restart zabbix安装Java网关

- 👆可选择不同的版本号, 和操作系统
- https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-java-gateway-6.0.45-release1.el9.x86_64.rpm
[root@Client02 ~]# hostname -I10.0.0.102 192.168.88.102[root@Client02 ~]# zabbix_agentd -Vzabbix_agentd (daemon) (Zabbix) 6.0.45[root@Client02 ~]# dnf -y install https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-java-gateway-6.0.45-release1.el9.x86_64.rpm[root@Client02 ~]# systemctl restart zabbix-java-gateway
web页面监控

zabbix面试题
1)zabbix压力大如何解决/如何优化??1.高并发需要对MySQL进行拆分2.由Server轮询修改为Agent主动上报模式(Active)3.地区较多情况或者网络复杂情况使用proxy代理模式4.系统自带监控项优化(自带的模版)# 可以通过自定义模版,从而自定义监控项,去除冗余项5.缓存优化6.进程优化vim /usr/local/etc/zabbix_server.conf# StartJavaPollers=2# StartHistoryPollers=5# StartPingers=1'哪个进程繁忙?-->100%-->适当调高(前提是你系统资源够用)'
2)zabbix监控过那些内容?'全面一点'1.监控主机硬件信息,内存,CPU,磁盘IO2.监控系统重要的配置文件,代码文件防止黑客篡改# md5校验3.监控服务状态,或者端口号,进程号4.监控业务的状态信息(nginx状态,数据库状态,增删改查,订单量,慢查询)5.监控业务调用接口,curl状态返回6.监控业务数据7.日志信息,日志状态✅️通过自定义什么都可以监控
3)zabbix自定义监控的流程1.通过sed,awk取出你想要监控的值# 也可以配合wc -l2.修改客户端的配置文件# UserParameter=key(名称),value(执行的命令)3.本地测试# zabbix_agentd -p | tail -14.重启服务5.服务端测试# zabbix_get -s 客户端IP -k key(名称)6.在页面添加这个key值(监控项)7.也可以在主机添加值映射-->触发器-->邮件or微信报警
4)用过zabbix的低级自动发现(LLD)吗?(监听多实例)✅️上面📚笔记有"自动发现"简单来说,低级自动发现就是为了解决“监控对象数量不固定”的问题
针对你提到的监听多实例(比如一台机器上跑了10个MySQL实例,或者几十个Java服务),传统的手动添加监控项太累,LLD(低级自动发现)可以自动识别并生成监控
==核心原理(三步走)==
- 发现规则:写一个脚本或命令,让Zabbix去问Agent:“你现在有几个实例?端口分别是多少?”
- JSON返回:Agent返回一个JSON格式的数据,列出所有发现的实例(例如:
[{#PORT}: 3306}, {#PORT}: 3307}]) - 原型生成:Zabbix拿到列表后,根据预设的“原型”,自动为每个端口创建监控项、触发器和图形
==举个栗子==
你有一台服务器,上面跑了3个Redis实例(端口6379, 6380, 6381)
- 没有LLD:你需要手动添加3个监控项,分别填端口号
- 使用LLD:你只配置一个规则
- Zabbix自动发现这3个端口,然后瞬间自动生成3套监控
- 甚至如果明天你开了第4个实例,Zabbix也会自动发现并开始监控,无需人工干预
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!



