2160 字
11 分钟
10-Zabbix-Porxy-分布式代理
Zabbix 6.4 分布式企业级性能监控平台
Zabbix Porxy 分布式代理官网:https://www.zabbix.com/cn
一、了解:Zabbix Proxy 分布式代理
<Zabbix Proxy 分布式代理>是实现<分布式监控>的<重要环节>,它可以代表 Zabbix Server 来收集<性能数据>,并予以本地缓存,然后将<性能数据>发送给 Zabbix Server,从而大大减轻了 Zabbix Server 上的 CPU 和磁盘 I/O 的开销。Zabbix Proxy 需要使用独立的数据库,可以是<MySQL 数据库>、<PostgreSQL 数据库>、<sqlite3 数据库>三选一。Zabbix Proxy 和 Zabbix Server 不能使用同一个<用户数据库>, 如需安装在同一台主机上,则须各自拥有不同的<用户数据库名>。Zabbix proxy 的应用场景图:
Zabbix Proxy 仅仅负责<数据收集>,无需负责<触发器计算、事件处理、警报发送>。Zabbix Proxy 支持的具体功能(见下表):| 功能 | proxy 支持列表 |
|---|---|
| Items | |
| Zabbix agent checks | Yes |
| Zabbix agent checks (active) | Yes |
| Simple checks | Yes |
| Trapper items | Yes |
| SNMP checks | Yes |
| SNMP traps | Yes |
| IPMI checks | Yes |
| JMX checks | Yes |
| Log file monitoring | Yes |
| Internal checks | Yes |
| SSH checks | Yes |
| Telnet checks | Yes |
| External checks | Yes |
| Dependent items | Yes |
| Script items | Yes |
| Built-in web monitoring | Yes |
| Item value preprocessing | Yes |
| Network discovery | Yes |
| Active agent autoregistration | Yes |
| Low-level discovery | Yes |
| Remote commands | Yes |
| Calculating triggers | No |
| Processing events | No |
| Event correlation | No |
| Sending alerts | No |
二、实验环境
| 节点 | 角色 | IP 地址 | 操作系统: | 硬件规格 |
|---|---|---|---|---|
| rocky-9-16 | MySQL 数据库(版本:8.0) 加装:Zabbix Agent 客户端代理 | 192.168.168.16/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
| rocky-9-17 | Nginx + PHP Web 前端 加装:Zabbix Agent 客户端代理 | 192.168.168.17/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
| rocky-9-18 | Zabbix Server 核心服务(版本:6.4) | 192.168.168.18/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
| rocky-9-19 | 被监控主机 安装:Zabbix Agent 客户端代理 | 192.168.168.19/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
| rocky-9-20 | Zabbix Proxy 代理服务(版本:6.4) 安装:MySQL 数据库(版本:8.0) 安装:Zabbix Agent 客户端代理 | 192.168.168.20/24 | Rocky Linux 9 | 1 vCPU、2GB 内存 |
三、部署:Zabbix Proxy 分布式代理
1. 安装部署:MySQL 数据库
#### 安装:MySQL 数据库,并创建<zabbix 用户数据库>## dnf install -y mysql-server mysql systemctl enable mysqld systemctl restart mysqld mysqladmin -uroot password 'a123456!'
mysql -uroot -p'a123456!' <<EOF create database if not exists zabbixproxy character set utf8mb4 collate utf8mb4_bin; create user if not exists root@'%' identified by 'a123456!'; grant all privileges on *.* to root@'%'; create user if not exists zabbix@localhost identified by 'a123456!'; grant all privileges on zabbixproxy.* to zabbix@localhost; create user if not exists zabbix@'%' identified by 'a123456!'; grant all privileges on zabbixproxy.* to zabbix@'%'; set global log_bin_trust_function_creators = 1; EOF
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload2. 安装部署:Zabbix Proxy 分布式代理
#### (1) 禁用:EPEL 源中的 Zabbix## vi /etc/yum.repos.d/ustc_epel_9.repo ## 这是:一个国内的 EPEL YUM 镜像源 [epel] name=Extra Packages for Enterprise Linux $releasever - $basearch baseurl=https://mirrors.ustc.edu.cn/epel/$releasever//Everything/$basearch failovermethod=priority enabled=1 gpgcheck=0 excludepkgs=zabbix*#### (2) 获取:<Zabbix 软件包>的<repo 源配置文件>## rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm yum clean all yum makecache#### (3) 安装:Zabbix Proxy 分布式代理服务## dnf install -y zabbix-proxy-mysql zabbix-sql-scripts#### (4) 针对 MySQL 数据库,导入:初始架构和数据## dnf install -y mysql cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | \ mysql --default-character-set=utf8mb4 -uzabbix -p'a123456!' -h 192.168.168.20 zabbixproxy#### (5) 在导入数据库架构之后,针对 MySQL 数据库,禁用:log_bin_trust_function_creators 选项。## mysql -uroot -p'a123456!' -h 192.168.168.20 <<EOF set global log_bin_trust_function_creators = 0; use zabbixproxy; show tables; EOF#### (6) 针对 Zabbix Proxy 代理服务,配置:数据库连接参数## test -f /etc/zabbix/zabbix_proxy.conf.bak || cp /etc/zabbix/zabbix_proxy.conf /etc/zabbix/zabbix_proxy.conf.bak vi /etc/zabbix/zabbix_proxy.conf ## -------------------------------------------------------------------------- ## Zabbix Proxy 工作模式 ## -------------------------------------------------------------------------- ## 设置:Zabbix Proxy 工作模式 ## 0 表示:主动模式(默认模式) ## 1 表示:被动模式 ProxyMode=0 ## 设置:Zabbix Proxy 如何与 Zabbix Server 交互 ## 如果是<主动模式>,则 Server=address1:port;address2:port ## 如果是<被动模式>,着 Server=address1;address2 Server=192.168.168.18:10051 ## 设置:Zabbix Proxy 在<被动模式>下的<侦听端口>(默认值 10051) ## 在<被动模式>下,<ListenPort>用于:接收 Zabbix Server 用于采集<Zabbix Proxy 样本缓存数据>的<主动轮询> ## 在<被动模式>下,<ListenPort>用于:接收 Zabbix Agent 在<主动模式>下发起的<数据汇报> ListenPort=10051 ## 设置:在<Zabbix Server Web 控制台>上的<Zabbix Proxy 选择菜单>中的<显示名称>(注意:不是 Host 主机标识名) Hostname=Zabbix_Proxy01 ## 设置:在<主动模式>下,Proxy 从 Server 获知<配置数据>的<时间间隔>(取值范围:1-3600*24*7,默认值 3600,单位:秒) ConfigFrequency=60 ## 设置:在<主动模式>下,Proxy 向 Server 发送<采样数据>的<时间间隔>(取值范围:1-3600,默认值 1,单位:秒) DataSenderFrequency=1 ## 设置:当 Server 可以连接时,Proxy 本机保存<采样数据>的<保存时长>(取值范围:0-720,默认值 0,单位:小时) ProxyLocalBuffer=0 ## 设置:当 Server 无法连接时,Proxy 本机保存<采样数据>的<保存时长>(取值范围:1-720,默认值 1,单位:小时) ProxyOfflineBuffer=1 ## 设置:监控数据的<缓存区容量>,根据监控主机数量适当调整(取值范围:256K-2G,默认值 8M) CacheSize=8M ## -------------------------------------------------------------------------- ## Zabbix Proxy 数据库连接参数 ## -------------------------------------------------------------------------- ## 设置:DB 数据库连接参数 DBHost=192.168.168.20 DBName=zabbixproxy DBUser=zabbix DBPassword=a123456! DBPort=3306 ## -------------------------------------------------------------------------- ## Zabbix Proxy 其他默认参数 ## -------------------------------------------------------------------------- ## 设置:Proxy 的日志文件 LogFile=/var/log/zabbix/zabbix_proxy.log ## 设置:Proxy 日志文件的最大大小,一旦超过,则日志旋转 ## 0 表示:禁止日志旋转,即:日志文档会一直增长下去 LogFileSize=0 ## 设置:Proxy 的 PID 文件 PidFile=/run/zabbix/zabbix_proxy.pid ## 设置:Proxy 的 Socket 套接字文件目录 SocketDir=/run/zabbix ## 设置:SNMP Trapper 陷阱的日志文件 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log ## 设置:<数据慢查询>的<衡量标准>(取值范围:1-3600000,默认值 0,单位:毫秒),一旦达到标准,就会计入日志 ## 0 表示:不记录<数据慢查询> LogSlowQueries=3000 ## 设置:允许接收<哪些 IP 地址>发起的<stat 状态请求>,格式:StatsAllowedIP=address1;address2 StatsAllowedIP=127.0.0.1 ## 设置:针对<Trapper 陷阱>的数据处理,所需等待的<最大时间>(取值范围:1-300,默认值 300,单位:秒) TrapperTimeout=300 ## 设置:针对<Agent、SNMP、External check>的数据处理,所需等待的<最大时间>(取值范围:1-30,默认值 3,单位:秒) Timeout=3 cat /etc/zabbix/zabbix_proxy.conf | grep -vE "^\s*(#|$)" ProxyMode=0 Server=192.168.168.18:10051 ListenPort=10051 Hostname=Zabbix_Proxy01 ConfigFrequency=60 DataSenderFrequency=1 ProxyLocalBuffer=0 ProxyOfflineBuffer=1 CacheSize=8M DBHost=192.168.168.20 DBName=zabbixproxy DBUser=zabbix DBPassword=a123456! DBPort=3306 LogFile=/var/log/zabbix/zabbix_proxy.log LogFileSize=0 PidFile=/run/zabbix/zabbix_proxy.pid SocketDir=/run/zabbix SNMPTrapperFile=/var/log/snmptrap/snmptrap.log LogSlowQueries=3000 StatsAllowedIP=127.0.0.1 Timeout=3#### (7) 启动:Zabbix Proxy 服务进程## systemctl enable zabbix-proxy.service systemctl restart zabbix-proxy.service firewall-cmd --permanent --zone=public --add-port=10051/tcp ## 防火墙放行:<Zabbix Server 核心服务>的<侦听端口> firewall-cmd --reload ## 禁用:SElinux if ! [[ $(getenforce) == "Disabled" ]]; then sed -r -i 's/^\s*SELINUX=.*/SELINUX=disabled/' /etc/selinux/config reboot fi3. 安装部署:Zabbix Agent 客户端代理(用于:采集 Proxy 自身数据)
dnf install -y zabbix-agent vi /etc/zabbix/zabbix_agentd.conf ... ... ## 设置:<超时阈值>为<最大值>,从而应对耗时较长的<数据收集>操作 Timeout=30 ... ... ## 针对<被被模式>,设置:<Zabbix Agent 侦听端口> ## ♦ 功能说明: ## ♢ 在<指定端口>侦听<数据采集请求> ListenPort=10050 ## 针对<被被模式>,设置:<Zabbix Server 核心服务器>的<IP 地址> 或者 <Zabbix Proxy 分布式代理服务器>的<IP 地址> ## ♦ 功能说明: ## ♢ 控制:<本机 Zabbix Agent 程序>在<10050/tcp 端口>上,应该接收谁的<数据采集请求>? Server=127.0.0.1 ## 针对<主动模式>,设置:<Zabbix Server 核心服务器>的<IP 地址> 或者 <Zabbix Proxy 分布式代理服务器>的<IP 地址> ## ♦ 功能说明: ## ♢ 控制:应该向谁主动汇报<采集数据>? ServerActive=127.0.0.1:10051 ## ## 针对<自动注册>,设置:唯一性的<主机注册名称> ## Hostname=zabbix_proxy_rocky_9_20 ... ... cat /etc/zabbix/zabbix_agentd.conf | grep -vE "^\s*(#|$)" PidFile=/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 ListenPort=10050 ## 针对<被动模式>,设置:<Zabbix Agent 侦听端口> Server=127.0.0.1 ## 针对<被动模式>,设置:接收<指定 IP 地址>发来的<度量查询请求> ServerActive=127.0.0.1:10051 ## 针对<主动模式>,设置:向<指定 IP 地址>主动汇报<度量采集数据> Hostname=zabbix_proxy_rocky_9_20 ## 针对<自动注册>,设置:唯一性的<主机注册名称> Timeout=30 ## 设置:<超时阈值>为<最大值>,从而应对耗时较长的<数据收集>操作 Include=/etc/zabbix/zabbix_agentd.d/*.conf
systemctl enable zabbix-agent.service systemctl restart zabbix-agent.service systemctl status zabbix-agent.service firewall-cmd --permanent --zone=public --add-port=10050/tcp ## 防火墙放行:<Zabbix Agent 客户端代理>的<侦听端口> firewall-cmd --reload ## 禁用:SElinux if ! [[ $(getenforce) == "Disabled" ]]; then sed -r -i 's/^\s*SELINUX=.*/SELINUX=disabled/' /etc/selinux/config reboot fi四、在Zabbix Server 上,创建:Zabbix Proxy 代理程序

五、配置:Zabbix Agent 使用 Zabbix Proxy 分布式代理
1. 配置:Zabbix Agent 使用 Zabbix Proxy
vi /etc/zabbix/zabbix_agentd.conf ... ... ## 设置:<超时阈值>为<最大值>,从而应对耗时较长的<数据收集>操作 Timeout=30 ... ... ## 针对<被被模式>,设置:<Zabbix Agent 侦听端口> ## ♦ 功能说明: ## ♢ 在<指定端口>侦听<数据采集请求> ListenPort=10050 ## 针对<被被模式>,设置:<Zabbix Proxy 分布式代理服务器>的<IP 地址> ## ♦ 功能说明: ## ♢ 控制:<本机 Zabbix Agent 程序>在<10050/tcp 端口>上,应该接收谁的<数据采集请求>? Server=192.168.168.20 ## 针对<主动模式>,设置:<Zabbix Proxy 分布式代理服务器>的<IP 地址> ## ♦ 功能说明: ## ♢ 控制:应该向谁主动汇报<采集数据>? ServerActive=192.168.168.20:10051 ## ## 针对<自动注册>,设置:唯一性的<主机注册名称> ## Hostname=rocky_9_19 ... ... cat /etc/zabbix/zabbix_agentd.conf | grep -vE "^\s*(#|$)" PidFile=/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 ListenPort=10050 Server=192.168.168.20 ## 针对<被动模式>,设置:接收<指定 Proxy 的 IP 地址>发来的<度量查询请求> ServerActive=192.168.168.20:10051 ## 针对<主动模式>,设置:向<指定 Proxy 的 IP 地址>主动汇报<度量采集数据> Hostname=rocky-9-19 Timeout=30 Include=/etc/zabbix/zabbix_agentd.d/*.conf UnsafeUserParameters=1
systemctl restart zabbix-agent.service2. 配置:Zabbix Server 通过 Zabbix Proxy 来采集 Zabbix Agent 数据

10-Zabbix-Porxy-分布式代理
https://fuwari.vercel.app/posts/zabbix监控/10-zabbix-porxy-分布式代理/