Zabbix自动扫描&&注册

6195 字
31 分钟
Zabbix自动扫描&&注册

Zabbix自动扫描&&注册#

[TOC]


SNMP#

什么是 SNMP?(故事背景)

想象一下,Zabbix 是一个**“总公司的巡查大老板”** 而你的网络设备(交换机、路由器、打印机等)是**“分布在各地的分公司”**

SNMP 就是**“总公司”和“分公司”之间约定好的一套沟通语言(协议)**

  • 如果没有 SNMP,Zabbix 这个大老板根本听不懂交换机在说什么
    • 也不知道怎么问它“你现在忙不忙?”
  • 有了 SNMP,Zabbix 就可以用这种通用的语言去问设备:
    • “嘿,兄弟,你现在CPU利用率多少?内存还剩多少?”

总结: SNMP 就是 Zabbix 监控网络设备时使用的“普通话”


关键角色#

在 SNMP 的世界里,有三个重要的小角色,缺一不可:

  1. Manager(管理站): 就是 Zabbix 服务器
    1. 它是发号施令的人,负责问问题(比如:“告诉我现在的流量”)
  2. Agent(代理): 安装在 网络设备(交换机/路由器)里的一个小软件或小模块
    1. 它负责听 Zabbix 的话,去查数据,然后汇报回去
  3. MIB(管理信息库): 这是一个**“数据字典”或“账本”**
    1. Agent 查到的所有数据(CPU、内存、流量)都记在这个账本里

OID vs MIB#

image-20260414181638738
image-20260414181638738

想象一棵大树(MIB 树)

你的拓扑图就是一棵树

  • 树根是 ==.==
  • 树枝分叉代表不同的设备类型(Windows, 交换机, Linux)
  • 再往下分叉是具体的指标(CPU, 磁盘, 内存)

什么是 OID?(IP地址) OID: 获取交换机内存空闲值表示方式为 .1.2.3.2

  • 这就像你在地图上找路:
    • 先去 .1 号城市(根节点)
    • 再去 .2 号区(交换机路由器)
    • 再去 .3 号街道(内存等信息)
    • 最后去 .2 号房间(空闲内存)
  • Zabbix 只认这一串数字
    • Zabbix 问交换机:“请告诉我 .1.2.3.2 是多少?”
    • 交换机就会回答:“是 500MB”

什么是 MIB?(域名)

那一串数字 .1.2.3.2 太难记了,人类记不住 所以 MIB 就是给这串数字起了个**“人类能看懂的名字”**,比如 NetworkMemorySize

  • Zabbix 干活时用的是 OID(数字)(IP地址)
  • 你配置的时候看的是 MIB(名字)(域名)

⚠️==它们指的是同一个东西==


轮询 vs 主动报警#

Zabbix 是怎么监控网络设备的?

监控过程通常有两种模式:

1️⃣模式一:Zabbix 主动去问(轮询)

  • 161 端口(==网络设备监听==)

这是最常用的方式

  1. Zabbix (Manager) 每隔几分钟就发个消息给 交换机 (Agent):“喂,把 .1.2.3.1(内存使用)和 .1.2.3.2(内存空闲)的数据报上来!”
  2. 交换机 查一下自己的 MIB 账本,把数据发回给 Zabbix
  3. Zabbix 拿到数据,画成图表给你看

2️⃣模式二:交换机主动报警(Trap)

  • 162 端口(==Zabbix监听==)

有时候 Zabbix 没空一直问,或者交换机想立刻求救

  1. 交换机 发现风扇坏了,或者温度过高
  2. 主动发个消息给 Zabbix:“救命啊!我着火了!”
  3. Zabbix 收到后,立刻给你发邮件报警
端口谁在监听这个端口?谁在连接这个端口?动作方向形象比喻
UDP 161被监控设备Zabbix 服务器Zabbix ➡️ 设备查水表 抄表员(Zabbix)去敲**你家门(161)**查数
UDP 162Zabbix 服务器被监控设备设备 ➡️ Zabbix按门铃 家里着火了(设备),你跑去**按 Zabbix 的门铃(162)**报警

防火墙怎么配?

  1. 在交换机/路由器上:
    • 你需要开放 UDP 161 端口(入站),允许 Zabbix 来访问
    • (通常不需要开放 162,因为交换机是往外发 Trap,不是接收)
  2. 在 Zabbix 服务器上:
    • 你需要开放 UDP 162 端口(入站),允许交换机来报警
    • (通常不需要开放 161,因为 Zabbix 是往外发请求,不是接收)

版本对比#

特性SNMP v1SNMP v2c (最常用)SNMP v3 (最安全)
安全等级🔴 低 (几乎裸奔)🟡 中 (稍微好点)🟢 高 (全副武装)
验证方式团体名 (Community String) ==类似一个简单的密码==团体名 支持更复杂的错误提示用户名 + 认证 + 加密 需要账号、密码和加密密钥
是否加密❌ 不支持❌ 不支持✅ 支持 (数据加密传输)
主要缺点安全性极差,数据容易被截获依然是明文传输,容易被抓包看到密码配置最复杂,消耗设备CPU资源稍多
小白建议别用,太老了首选 (内网监控推荐) 配置简单,兼容性好内网安全要求极高时用 防止敏感数据泄露

客户端安装#

  1. 在被监控设备上开启 SNMP:
    • 登录你的交换机/路由器,开启 SNMP 功能。
    • 设置一个团体名(Community String)。。。。
  2. 在 Zabbix 上添加主机:
    • 告诉 Zabbix 这个设备的 IP 地址。
    • 告诉 Zabbix 刚才设置的团体名(密码)。
    • 关联一个模板(Template)。模板里已经写好了各种 OID(比如监控CPU的OID,监控流量的OID),你直接用就行,不用自己一个个手写
Terminal window
1)客户端安装
[root@Client ~]# yum -y install net-snmp
# 默认就是v2c 版本的
2)设置团体名
'这就相当于“密码”'
# Zabbix 必须知道这个密码,交换机才肯理它
通常默认是 `public`(只读)或 `private`(读写)
[root@Client ~]# vim /etc/snmp/snmpd.conf
com2sec notConfigUser 192.168.88.99 passwd
# 来源IP为zabbix; 自定义为passwd(密码)
...
view systemview included .1
...
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
# 这两行都写上,就是为了“通吃”,保证兼容性
组名 版本号 用户名(安全名)
Terminal window
com2sec notConfigUser default public
...
com2sec notConfigUser 192.168.88.99 passwd
  • com2sec:这是指令
    • 意思就是把 Community 字符串映射成一个 Security Name(安全名)
  • notConfigUser:这是映射后的安全名
    • 随便起的==别名==,但在后面的配置里要用到
  • default:这是来源地址
    • default 代表允许任意 IP(0.0.0.0/0)使用这个密码来连接
    • 建议:为了安全,最好把 default 改成你 Zabbix 服务器的具体 IP
  • passwd:这就是你自定义的团体名(密码)

Terminal window
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
...'默认写法'
view systemview included .1
  1. 原来的写法(默认配置): 系统默认只给你开了两个“小窗口”
    • .1.3.6...1 是系统基本信息(比如设备名字、描述)
    • .1.3.6...25.1.1 是系统运行时间等…
    • 缺点: 如果你用 Zabbix 想监控 CPU 使用率、网卡流量、硬盘空间,默认配置是不让你看的,Zabbix 会报错“无权限”或“无数据”
  2. 你修改后的写法(.1):
    • .1 代表整棵树的树根
    • 效果: 你把大门彻底打开了!告诉 SNMP:“Zabbix 想要什么数据,整个树下的所有数据(CPU、内存、流量、温度等)全部开放给它看”
Terminal window
[root@Client ~]# systemctl enable --now snmpd
Created symlink '/etc/systemd/system/multi-user.target.wants/snmpd.service' '/usr/lib/systemd/system/snmpd.service'.
[root@Client ~]# ss -lntup | grep :161
udp 0.0.0.0:161 users:(("snmpd",pid=45781,fd=6))
# 模仿网络设备,监听161端口

zabbix(服务端)安装#

Terminal window
1)安装
[root@Zabbix ~]# yum -y install net-snmp-utils
'工具包'-->无需启动,可以直接使用
2)测试
[root@Zabbix ~]# snmpwalk -v2c -c passwd 10.0.0.102 SysName
Timeout: 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 SysName
SNMPv2-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.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 1975388 KBytes
# 这串数字代表内存资源
监控指标常用 OID (前缀)含义与用途备注
系统描述.1.3.6.1.2.1.1.1sysDescr 设备型号、软件版本信息用来识别这是台什么设备
系统运行时间.1.3.6.1.2.1.1.3sysUpTime 设备启动多久了单位通常是百分之一秒
接口描述.1.3.6.1.2.1.2.2.1.2ifDescr 网卡名字 (如 GigabitEthernet0/1)非常重要,用来对应端口
接口状态.1.3.6.1.2.1.2.2.1.8ifOperStatus 端口是 UP(1) 还是 DOWN(2)监控端口通断的核心
入站流量.1.3.6.1.2.1.2.2.1.10ifInOctets 网卡接收的总字节数监控下载速度用这个
出站流量.1.3.6.1.2.1.2.2.1.16ifOutOctets 网卡发送的总字节数监控上传速度用这个
CPU 使用率.1.3.6.1.4.1.2011...厂商私有 OID 不同品牌不一样华为通常是 .1.3.6.1.4.1.2011 开头
内存使用.1.3.6.1.2.1.25.2hrMemory 内存总量/使用量你刚才查的就是这一类

web页面配置#

image-20260414204600330
image-20260414204600330

image-20260414204155041
image-20260414204155041

image-20260414205010004
image-20260414205010004

image-20260414205032909
image-20260414205032909

自动发现#

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

image-20260414220718274
image-20260414220718274

  • 觉得慢, 可以把更新间隔--->改为1m

image-20260414221818707
image-20260414221818707

image-20260414221738108
image-20260414221738108

image-20260414221603750
image-20260414221603750

Terminal window
[root@Zabbix ~]# systemctl restart zabbix
'可以试着重启一下-->自动发现'
[root@Zabbix ~]# tail -f /tmp/zabbix_server.log
17199: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.101102
    • 这就是你 IP 范围里扫出来的机器
  • 原因interface became available
    • 说明 Zabbix 尝试连接它们的 10050 端口成功了,确认 Agent 在线

自动注册#

Terminal window
客户端主动将自身信息上传给服务端,用来减少服务端的压力
"根据需求调整模式"
📌 因此:
被动模式(Passive):✅️"默认启用"
Zabbix server 主动连接 agent 获取数据;
主动模式(Active):
Agent 主动连接 server 上报数据
1.当服务器超过 300–500+ 台以上→ 推荐用主动模式
# 减少服务端压力
2.当网络复杂(如跨防火墙、NAT)→ 优先用主动模式
# Agent 主动出站,更易通过防火墙
Terminal window
1)修改配置文件
[root@Client ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=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客户端)

image-20260415100228752
image-20260415100228752


监控项设计#

“按监控项的重要性与可靠性需求,动态选择通信模式:

  • 关键指标(高可用、故障敏感)→ 被动模式(Server 主动轮询)
  • 非关键/高频/批量指标 → 主动模式(Agent 自主上报)”

💡 “服务是否存活、负载、内存、CPU” —— 这些正是必须用被动模式保障快速故障检测的关键指标!

  • 因为:如果 agent 崩溃或网络中断
    • 被动模式会在几秒内触发“无数据”告警
    • 而主动模式可能要等 1~2 分钟才被发现

✅ 同一台主机,混合使用两种类型——这才是真正的“智能监控”


  • web页面设置
  1. 先把上面做的自动发现的相关配置停用

    1. 两个设置都停用
  2. 删除现有的客户端

image-20260415085107087
image-20260415085107087

image-20260415104344472
image-20260415104344472

Terminal window
[root@Zabbix ~]# tail -f /tmp/zabbix_server.log
17221: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

image-20260415085546281
image-20260415085546281

image-20260415105742854
image-20260415105742854

image-20260415110152346
image-20260415110152346

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

image-20260415111224123
image-20260415111224123

image-20260415111326649
image-20260415111326649

image-20260415111346498
image-20260415111346498

image-20260415111435498
image-20260415111435498

image-20260415115136378
image-20260415115136378

image-20260415120047662
image-20260415120047662

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

image-20260415121722360
image-20260415121722360

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

image-20260415125717590
image-20260415125717590

  • 这样就恢复正常了!
Caution
  • 所以我们第一次添加主机设备的时候
  • 监控项一定要有轮询的
    • 模版往往是--->Linux by Zabbix agent✅️
    • 这样==联通性==就绿了🥬

Zabbix Proxy(代理)#

你可以把整个监控系统想象成一家大公司:

  • Zabbix Server 就是 总公司,负责制定监控策略、查看所有数据、发出警报
  • 被监控的服务器 就是分布在全国各地的 员工
  • Zabbix Proxy 就是 区域经理

如果没有“区域经理”(Proxy)

所有“员工”(服务器)都要直接向“总公司”(Server)汇报工作

当员工数量成千上万时,总公司会被海量的汇报信息淹没,导致效率低下甚至瘫痪

image-20260415131532165
image-20260415131532165

这时,“区域经理”(Proxy)的作用就体现出来了:

  1. 分担工作:总公司把某个区域(比如一个机房或一个城市)的管理权交给区域经理
  2. 收集信息:这个区域的员工只向自己的区域经理汇报
  3. 统一上报:区域经理收集好所有员工的信息后,再统一、定期地汇报给总公司

📝 核心作用总结

  • 减轻 Server 负担:这是最主要的目的
    • Proxy 代替 Server 去收集数据
    • 让 Server 能更专注于核心任务,比如数据处理和告警
  • 简化网络配置:只需要 Proxy 和 Server 之间建立一条连接即可
    • 不需要为每个服务器都开防火墙规则
  • 适用于分布式场景:特别适合监控跨地域、多机房、网络环境复杂的场景
Warning

最后,还有一个重要的警告:Proxy 的数据库必须和 Server 的数据库分开,否则可能会导致 Server 的数据损坏

这就像区域经理要有自己独立的档案室,不能和总公司的混在一起

Terminal window
'新克隆一台机器'
[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@local
2026-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> exit
Bye
4)导入表结构
[root@Proxy tmp]# cd /soft/zabbix-6.0.45/database/mysql
[root@Proxy mysql]# mysql -uzabbix -p'passwd' zabbix < schema.sql
mysql: [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: no
With database: MySQL
SNMP: yes
nable proxy: yes
Enable 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]# ll
total 28
-rw-r--r-- 1 root root 24752 Apr 15 14:46 zabbix_proxy.conf
drwxr-xr-x 2 root root 6 Apr 15 14:46 zabbix_proxy.conf.d
'这些都是proxy代理的配置文件'
[root@Proxy etc]# vim zabbix_proxy.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=passwd
Server=10.0.0.99
# 和Zabbix Server得能够通信,处于同一网段
# web页面中,配置的也得是这个网段
Hostname=sh_proxy
# 和Zabbix Server对应即可!
# 不一定是👇这个主机名
7)创建zabbix的虚拟用户
# 名称固定,必须是它
[root@Proxy etc]# zabbix_proxy
zabbix_proxy [17954]: user zabbix does not exist
zabbix_proxy [17954]: cannot run as root!
[root@Proxy etc]# id zabbix
id: ‘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 zabbix
uid=777(zabbix) gid=777(zabbix) groups=777(zabbix)
8)启动
[root@Proxy etc]# zabbix_proxy
# 因为是编译安装,不能systemd启动
'当然你也可以编写service文件'
[root@Proxy etc]# netstat -lntup | grep zabbix_proxy
0 0.0.0.0:10051 LISTEN 17967/zabbix_proxy
  • web页面创建 Proxy代理

image-20260415154054076
image-20260415154054076

强烈建议你在实际生产环境中选择【主动式】

为什么推荐【主动式】

  • 防火墙友好:
    • 让 Proxy 主动连 Server(出方向)比让 Server 去连成百上千个 Proxy(入方向)更容易配置防火墙
  • 性能更好:
    • 被动模式下,Server 需要维护到所有 Proxy 的连接,压力较大
    • 主动模式下,Server 只需要接收数据,压力分担到了 Proxy 端
Terminal window
'修改两台客户端的配置'
# 删除web页面的客户端&&停用自动发现,注册功能
[root@Client02 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.88.103
ServerActive=192.168.88.103
# 先主动上传给Proxy代理
Hostname=web01
Hostname=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_proxy
0 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”(即被动模式)


  1. 模版选择

Linux by Zabbix agent✅️

Linux by Zabbix agent active❌️

  • 里面的监控项都是**“主动模式(Active)”**
  • 通常会有==联通性问题==
Note

只是第一次添加时—>会有联通性问题🚫

后面只要==主机名称==配置好后, 并且联通性绿了🥬

客户端也可以 以**“主动模式(Active)”**运行的


  1. 名称
Terminal window
'尽量和zabbix_agentd.conf中的Hostname保持一致'
Hostname=web01
Hostname=web02
======================
🌰举个反例

image-20260415192510856
image-20260415192510856

  • 名称随便起的 aaa bbb
Terminal window
[root@Proxy ~]# pkill zabbix_proxy
[root@Proxy ~]# zabbix_proxy
'代理重启'
[root@Zabbix ~]# tail -f /tmp/zabbix_server.log
22287: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.log
19344: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
✅️说明接口联通性可以了 '代理日志'

image-20260415192958725
image-20260415192958725

Terminal window
[root@Client ~]# systemctl restart zabbix-agent
[root@Client02 ~]# systemctl restart zabbix-agent
'重启客户端'
[root@Proxy ~]# tail -f /tmp/zabbix_proxy.log
19323: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)”运行的

image-20260415193842065
image-20260415193842065

  • 我们试着改一下模式, 加一个主动Active的监控项

image-20260415194153485
image-20260415194153485

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

image-20260415194738745
image-20260415194738745

image-20260415195724480
image-20260415195724480

Terminal window
[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 found
host [web02] not found
'对应的客户端配置文件中的Hostname'
-->得和web上保持一致!
# 并非真的主机名
[root@Client02 ~]
[root@Client ~]

image-20260415200356095
image-20260415200356095

  • 印证了—>客户端也可以 以**“主动模式(Active)”**运行的
    • 需要重启 Proxy代理 && 客户端

image-20260415211658590
image-20260415211658590

image-20260415211814746
image-20260415211814746

  • 重启 Proxy代理 && 客户端
Terminal window
[root@Proxy ~]# tail -f /tmp/zabbix_proxy.log
'添加成功!'
enabling Zabbix agent checks on host "web01": interface became available
enabling Zabbix agent checks on host "web02": interface became available

image-20260415212142493
image-20260415212142493

监控java项目#

JMX协议#

Terminal window
[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 -version
java 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 4
drwxr-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 4
drwxr-xr-x 9 root root 4096 Apr 15 21:36 apache-tomcat-9.0.113
lrwxrwxrwx 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/sh
export 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 ==私网==
  • -Dcom.sun.management.jmxremote.port=12345

    • 指定 JMX 监听的端口号
  • -Dcom.sun.management.jmxremote.ssl=false

    • 禁用 SSL 加密
  • -Dcom.sun.management.jmxremote.authenticate=false

    • 禁用身份验证(免密登录)
Terminal window
[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/java
127.0.0.1:8005 LISTEN 131370/java
:::12345 LISTEN 131370/java
:::38035 LISTEN 131370/java
'必须有8080 && 12345端口'

配置Java网关#

image-20260415233124042
image-20260415233124042

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

安装Java网关

image-20260415222217389
image-20260415222217389

Zabbix 官方仓库

Terminal window
[root@Client02 ~]# hostname -I
10.0.0.102 192.168.88.102
[root@Client02 ~]# zabbix_agentd -V
zabbix_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

image-20260415230032303
image-20260415230032303


web页面监控

image-20260415233017405
image-20260415233017405

zabbix面试题#

Terminal window
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%-->适当调高(前提是你系统资源够用)'

image-20260416085736819
image-20260416085736819

Terminal window
2)zabbix监控过那些内容?
'全面一点'
1.监控主机硬件信息,内存,CPU,磁盘IO
2.监控系统重要的配置文件,代码文件防止黑客篡改
# md5校验
3.监控服务状态,或者端口号,进程号
4.监控业务的状态信息(nginx状态,数据库状态,增删改查,订单量,慢查询)
5.监控业务调用接口,curl状态返回
6.监控业务数据
7.日志信息,日志状态
✅️通过自定义什么都可以监控
3)zabbix自定义监控的流程
1.通过sed,awk取出你想要监控的值
# 也可以配合wc -l
2.修改客户端的配置文件
# UserParameter=key(名称),value(执行的命令)
3.本地测试
# zabbix_agentd -p | tail -1
4.重启服务
5.服务端测试
# zabbix_get -s 客户端IP -k key(名称)
6.在页面添加这个key值(监控项)
7.也可以在主机添加值映射-->触发器-->邮件or微信报警
4)用过zabbix的低级自动发现(LLD)吗?(监听多实例)
✅️上面📚笔记有"自动发现"

简单来说,低级自动发现就是为了解决“监控对象数量不固定”的问题

针对你提到的监听多实例(比如一台机器上跑了10个MySQL实例,或者几十个Java服务),传统的手动添加监控项太累,LLD(低级自动发现)可以自动识别并生成监控


==核心原理(三步走)==

  1. 发现规则:写一个脚本或命令,让Zabbix去问Agent:“你现在有几个实例?端口分别是多少?”
  2. JSON返回:Agent返回一个JSON格式的数据,列出所有发现的实例(例如:[{#PORT}: 3306}, {#PORT}: 3307}]
  3. 原型生成:Zabbix拿到列表后,根据预设的“原型”,自动为每个端口创建监控项、触发器和图形

==举个栗子==

你有一台服务器,上面跑了3个Redis实例(端口6379, 6380, 6381)

  • 没有LLD:你需要手动添加3个监控项,分别填端口号
  • 使用LLD:你只配置一个规则
    • Zabbix自动发现这3个端口,然后瞬间自动生成3套监控
    • 甚至如果明天你开了第4个实例,Zabbix也会自动发现并开始监控,无需人工干预

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Zabbix自动扫描&&注册
https://www.kpyun.fun/posts/web/zabbix/zabbix03/
作者
久棹
发布于
2026-01-18
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录