简单讲zabbix proxy就是zabbix server的代理服务,它能帮助zabbix server采集数据,然后再统一的发送给zabbix server ;它的功能和zabbix server 很类似,zabbix server 能做到它几乎都能做;主要作用就是代理zabbix server ;我们知道监控一个主机或者服务,通常监控项有很多,每个监控项的数据采集工作都会消耗zabbix server 一个socket;这样一来监控一个主机少则十几个socket连接,多则几十个上百个;我们试想一个场景,我们要监控一个集群,这个集群有100台物理主机,每个物理主机都要监控cpu,内存,磁盘等等,一台服务器平均监控项为20个,那么100台服务器就要2000个socket连接;这意味着zabbix server要有2000个socket连接需要维持;这样一来无疑对zabbix server性能有很大的影响;为了降低zabbix server连接socket数量过大而带来的性能消耗,此时zabbix server就应该委托其他主机来代理收集数据;这个代理就是zabbix proxy;除了以上场景,比如跨机房的场景我们也需要用zabbix proxy,每个zabbix proxy只负责采集本地同一机房里的主机的数据,然后统一发送给zabbix server;这样一来可以减少zabbix server的socket连接数量,从而降低zabbix server的压力;

zabbix proxy 部署

1. 创建用户

为了安全考虑,Zabbix 只使用普通用户运行,假如你当前用户是 zhang3,那么你运行它,它便使用 zhang3 身份运行。但是如果你在 root 环境下运行 Zabbix,那么 Zabbix 将会主动使用 zabbix 用户来运行。假如你的系统没有名叫 zabbix 的用户,那么你需要创建一个用户,如下:

groupadd --system zabbix
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix

2. 安装 Zabbix 所需依赖

dnf -y install epel-release
dnf -y install net-snmp-devel fping OpenIPMI-devel go

3. 下载 Zabbix 源码并解压

wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.2.tar.gz
tar -zxvf zabbix-7.0.0.tar.gz

4. 创建Zabbix数据库

  1. 使用命令的方式创建 zabbix 数据库,创建完成后去 宝塔面板-数据库-从服务器获取 就可以看到新建的数据库了。

mysql -uroot -p
password
MariaDB [(none)]> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
MariaDB [(none)]> create user zabbix_proxy@localhost identified by 'zabbix_proxy';
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix_proxy@localhost;
MariaDB [(none)]> set global log_bin_trust_function_creators = 1;
MariaDB [(none)]> quit;
  1. 解压前面下载到本地的源码文件,进入 /database/mysql 目录,分别按顺序导入 schema.sql这个文件,这样数据库就创建完成并导入初始数据了。

mysql -uroot -p
password
MariaDB [(none)]> show databases;
MariaDB [(none)]> use zabbix_proxy;
Database changed
MariaDB [zabbix]> source ~/zabbix-7.0.2/database/mysql/schema.sql;
MariaDB [zabbix]> quit;
 
mysql -uroot -p
password
MariaDB [(none)]> set global log_bin_trust_function_creators = 0;
MariaDB [(none)]> quit;

5.编译解压后的程序

构建 Zabbix 代理或 Zabbix 代理需要带有 GNU 扩展的 C99。可以通过设置 CFLAGS="-std=gnu99" 明确指定此版本:

export CFLAGS="-std=gnu99"
./configure --prefix=/usr/local/zabbix --enable-agent2 --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-openssl --with-ssh2 --enable-proxy

若无报错则开始编译安装

make install

6. 更新 Zabbix 的配置文件

  • 编辑 Zabbix 代理配置文件/usr/local/zabbix/etc/zabbix_agentd.conf
    必须在文件中指定 Zabbix 服务器IP 地址。来自其他主机的连接将被拒绝

nano /usr/local/zabbix/etc/zabbix_agent2.conf
  • 编辑 Zabbix 代理配置文件/usr/local/zabbix/etc/zabbix_proxy.conf

nano /usr/local/zabbix/etc/zabbix_proxy.conf
ProxyMode=0
Server=xxx.xxx.xxx.xxx                        #填写Server的IP,Proxy会将收集到的数据发往这个IP。
Hostname=web                                 #在web端网页配置时需要用到,保持一致
DBHost=localhost                             #数据库,使用本地,也可以使用ip
​
DBName=zabbix_proxy                          #数据库名称,创建zabbix-proxy的mysql的数据库名称
DBUser=zabbix_proxy                              
DBPassword=zabbix_proxy                          
DBSocket=/tmp/mysql.sock                     #mysqlsock文件,默认是使用socket通信的
​DBPort=3306

ProxyLocalBuffer=0                           #当数据发送到Server,还要在本地保留多少小时.不保留
ProxyOfflineBuffer=3                         #当数据没有发送到Server,在本地保留多少小时,3小时。

ConfigFrequency=3600                         #代理多久从Server获取一次配置变化,默认3600秒.
​
DataSenderFrequency=60                        #这个是proxy端向server端发送数据的时间,单位是秒
ExternalScripts=/usr/lib/zabbix/externalscripts
 

PidFile=/tmp/zabbix_proxy.pid
SocketDir=/tmp
CacheSize=64M

StartPollers=5
StartAgentPollers=5
StartSNMPPollers=5
StartIPMIPollers=5

7. 启动 Zabbix 程序

#配置zabbix-agent2
 
nano /usr/lib/systemd/system/zabbix-agent2.service
 
[Unit]
Description = Zabbix Agent2
After = syslog.target network.target
 
[Service]
Type = forking
Restart = on-failure
PIDFile = /tmp/zabbix_agent2.pid
KillMode = control-group
ExecStart = /usr/local/zabbix/sbin/zabbix_agent2 -c /usr/local/zabbix/etc/zabbix_agent2.conf
RestartSec = 10s
TimeoutSec = 0
User = zabbix
Group = zabbix
 
[Install]
WantedBy = multi-user.target
#配置zabbix-proxy
 
nano /usr/lib/systemd/system/zabbix-proxy.service
 
[Unit]
Description = Zabbix Proxy
After = syslog.target network.target
 
[Service]
Type = forking
Restart = on-failure
PIDFile = /tmp/zabbix_proxy.pid
KillMode = control-group
ExecStart = /usr/local/zabbix/sbin/zabbix_proxy -c /usr/local/zabbix/etc/zabbix_proxy.conf
RestartSec = 10s
TimeoutSec = 0
User = zabbix
Group = zabbix
 
[Install]
WantedBy = multi-user.target

设置开机自动启动

systemctl enable zabbix-proxy.service
systemctl enable zabbix-agent2.service
 
systemctl start zabbix-proxy.service
systemctl start zabbix-agent2.service
 
systemctl status zabbix-proxy.service
systemctl status zabbix-agent2.service

8.在zabbix web界面配置添加zabbix proxy

主界面,管理,proxy

创建proxy, 名字和配置文件中hostname一致

添加proxy所在网络主机监控,直接用proxy所在网段ip即可