3-proxy架构详解
1. proxy简介
Zabbix proxy是一个可以从一个或多个受监控设备采集监控数据并将信息发送到Zabbix server的进程 , 主要是代表Zabbix server 工作。 所有收集的数据都在本地缓存 , 然后传输到proxy所属的Zabbix server。
部署Zabbix proxy是可选的 , 但可能非常有利于分担单个Zabbix server的负载。 如果只有代理采集数据 , 则Zabbix server上会减少CPU和磁盘I/O的开销。
Zabbix proxy是无需本地管理员即可集中监控远程位置、分支机构和网络的理想解决方案。
Zabbix proxy需要使用独立的数据库。
这里需要注意,proxy架构里面, 同样支持主动模式和被动模式,但是被动模式一般比较少用。

2. proxy配置文件
ProxyMode=0 #调整proxy的模式: 0为主动模式, 1为被动模式, 默认为主动模式
Server=192.168.7.100 # zabbix-server服务器端的IP地址
Hostname=zabbix_proxy_active # 主动模式的hostname(代理服务器名称)需要与页面中agent的名称相互对应
ListenPort=10051 # 主动模式监听的端口
DebugLevel=3 # 日志级别
EnableRemoteCommands=1 # 允许远程连接
LogRemoteCommands=0 # 关闭log日志记录
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=192.168.7.103 # 数据库服务器地址
DBName=zabbix_proxy_active # 使用数据库的名称
DBUser=zabbix_proxy_active # 连接数据库的名称
DBPassword=123456 # 数据库的密码
ProxyLocalBuffer=720 # 已经提交到zabbix serverd的数据保留时间
ProxyOfflineBuffer=720 # 未提交到zabbix serever的数据保留时间
HeartbeatFrequency=120 # 心跳检测时间,默认是60s,被动模式不使用
ConfigFrequency=60 # 间隔多久时间从zabbix server获取监控数据(一般设置五分钟)
DataSenderFrequency=60 # 数据发送间隔时间,默认为1s。
StartPollers=20 # 启动数据采集器数量
JavaGateway=192.168.7.102 # zabbix-java-gateway主机的IP地址
JavaGatewayPort=10052 # gateway主机的端口
StartJavaPollers=20 # 启动多少个线程采集数据
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
ListenIP=0.0.0.0 # 主动模式监控IP地址
CacheSize=128M # 保留监控项占用的最大内存(生产中是2G)
HistoryCacheSize=128M # 保留监控历史数据占用的最大内存(生产中是2G)
HistoryIndexCacheSize=32M # 监控项历史数据的索引信息(生产中是2G)
Timeout=30 # 监控项超时时长,单位为秒
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000 #单位为毫秒,多久数据库查询会被记录到日志
AllowRoot=0 # 暂时不允许root登陆
User=zabbix # 允许zabbix用户登录3. 部署
3.1 proxy安装
proxy安装步骤大致与zabbix server安装方式一样
3.1.1 apt/yum安装
这里的apt/yum安装方式是直接复制官方文档
ubuntu2204安装
zabbix源#wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb # dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb# apt update安装
proxy包# apt install zabbix-proxy-mysql zabbix-sql-scripts创建数据库
# mysql -uroot -p password mysql> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin; mysql> create user zabbix@localhost identified by 'password'; mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost; mysql> set global log_bin_trust_function_creators = 1; mysql> quit;导入数据库数据
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy配置完成之后 ,重启服务即可
# systemctl restart zabbix-proxy # systemctl enable zabbix-proxy
centos8安装
zabbix源# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm # dnf clean all安装
proxy包dnf install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy创建数据库
# mysql -uroot -p password mysql> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin; mysql> create user zabbix@localhost identified by 'password'; mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost; mysql> set global log_bin_trust_function_creators = 1; mysql> quit;导入数据库数据
# cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy配置完成之后 ,重启服务即可
# systemctl restart zabbix-proxy # systemctl enable zabbix-proxy
3.1.2 编译安装
centos依赖包安装
yum install gcc make libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel -yubuntu依赖包安装
apt install libmysqld-dev libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev curl libcurl4-openssl-dev3.1.2.1 ubuntu2204
环境准备
root@proxy:~# groupadd --system zabbix root@proxy:~#useradd --system -g zabbix -s /usr/sbin/nologin zabbix root@proxy:~#mkdir -vp /apps/zabbix_server root@proxy:~#mkdir /var/log/zabbix root@proxy:~#chown zabbix.zabbix /var/log/zabbix root@proxy:~#mkdir /apps/zabbix_server/run/ root@proxy:~#chown zabbix.zabbix /apps/zabbix_server/run root@proxy:~# tar -xf zabbix-6.0.27.tar.gz -C /usr/local/src/ root@proxy:~# cd /usr/local/src/安装依赖软件
root@proxy:/usr/local/src/zabbix-6.0.27# apt install gcc make libmariadbd-dev libxml2-dev libsnmp-dev libevent-dev curl libcurl4-openssl-dev libxml++2.6-dev编译安装proxy
root@proxy:/usr/local/src/zabbix-6.0.27# ./configure --prefix=/apps/zabbix_server --enable-proxy --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a race-free mkdir -p... /usr/bin/mkdir -p root@proxy:/usr/local/src/zabbix-6.0.27# make install 在数据库节点创建对应proxy数据库
[root@mysql ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 12205 Server version: 10.11.7-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database zabbix_proxy_pasive character set utf8mb4 collate utf8mb4_bin; Query OK, 1 row affected (0.000 sec) MariaDB [(none)]> create user proxy@"192.168.194.%" identified by 'proxy.zabbix'; Query OK, 0 rows affected (0.045 sec) MariaDB [(none)]> grant all privileges on zabbix_proxy_pasive.* to proxy@"192.168.194.%"; Query OK, 0 rows affected (0.034 sec) MariaDB [(none)]> set global log_bin_trust_function_creators = 1; Query OK, 0 rows affected (0.015 sec) 导入数据库信息
root@proxy:~# mysql -uproxy -p"proxy.zabbix" -h192.168.194.141 zabbix_proxy_pasive < /usr/local/src/zabbix-6.0.27/database/mysql/schema.sql 准备systemd服务启动文件
root@proxy:/usr/lib# systemctl cat zabbix-proxy # /lib/systemd/system/zabbix-proxy.service [Unit] Description=Zabbix Proxy After=syslog.target After=network.target [Service] Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_proxy.conf" EnvironmentFile=-/etc/default/zabbix-proxy Type=forking Restart=on-failure PIDFile=/apps/zabbix_server/run/zabbix_proxy.pid KillMode=control-group ExecStart=/apps/zabbix_server/sbin/zabbix_proxy -c $CONFFILE ExecStop=/bin/kill -SIGTERM $MAINPID RestartSec=10s TimeoutSec=infinity [Install] WantedBy=multi-user.target
3.1.2.2 CentOS8
环境准备
[root@proxy ~]# id zabbix uid=989(zabbix) gid=985(zabbix) groups=985(zabbix) [root@proxy ~]# mkdir -vp /apps/zabbix_server mkdir: created directory '/apps' mkdir: created directory '/apps/zabbix_server' [root@proxy ~]# mkdir /var/log/zabbix [root@proxy ~]# mkdir /apps/zabbix_server/run/ [root@proxy ~]# chown zabbix.zabbix /apps/zabbix_server/run [root@proxy ~]# tar -xf zabbix-6.0.27.tar.gz -C /usr/local/src/ [root@proxy ~]# cd /usr/local/src/ 安装依赖包
[root@proxy zabbix-6.0.27]# yum install gcc make libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel libevent-devel pcre-devel编译
[root@proxy zabbix-6.0.27]# ./configure --prefix=/apps/zabbix_server --enable-proxy --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 [root@proxy zabbix-6.0.27]# make install准备proxy数据库
MariaDB [(none)]> create database zabbix_proxy_active character set utf8mb4 collate utf8mb4_bin; Query OK, 1 row affected (0.039 sec) MariaDB [(none)]> grant all privileges on zabbix_proxy_active.* to proxy@"192.168.194.%"; Query OK, 0 rows affected (0.111 sec) MariaDB [(none)]> create user proxy@"192.168.194.%" identified by 'proxy.zabbix'; Query OK, 0 rows affected (0.045 sec) 导入数据库数据
[root@proxy zabbix-6.0.27]# mysql -uproxy -p"proxy.zabbix" -h192.168.194.141 zabbix_proxy_active < /usr/local/src/zabbix-6.0.27/database/mysql/schema.sql 准备
systemd启动文件[root@proxy zabbix-6.0.27]# systemctl cat zabbix-proxy # /usr/lib/systemd/system/zabbix-proxy.service [Unit] Description=Zabbix Proxy After=syslog.target After=network.target [Service] Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_proxy.conf" EnvironmentFile=-/etc/default/zabbix-proxy Type=forking Restart=on-failure PIDFile=/apps/zabbix_server/run/zabbix_proxy.pid KillMode=control-group ExecStart=/apps/zabbix_server/sbin/zabbix_proxy -c $CONFFILE ExecStop=/bin/kill -SIGTERM $MAINPID RestartSec=10s TimeoutSec=infinity [Install] WantedBy=multi-user.target
3.2 模式配置
3.2.1 被动模式配置
被动模式不常用。一般使用主动模式
拓扑

3.2.1.1 配置agent客户端
这里如果agent客户端直接配置为被动模式接口。配置文件中需要修改内容如下
[root@centos8 ~]# grep -i "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.194.132,192.168.194.131 #这里只需要指定proxy主机IP(192.168.194.132)即可
Hostname=192.168.194.135
Include=/etc/zabbix/zabbix_agentd.d/*.conf
3.2.1.2 配置proxy配置文件
root@ubuntu2204:~# grep -i "^[a-Z]" /apps/zabbix_server/etc/zabbix_proxy.conf
ProxyMode=1 #启动被动模式
Server=192.168.194.131 #指定zabbix server IP
Hostname=xiong-proxy-pasive #指定proxy名称,与后续页面agent名称对应
LogFile=/var/log/zabbix/zabbix_proxy.log
PidFile=/apps/zabbix_server/run/zabbix_proxy.pid
SocketDir=/apps/zabbix_server/run
DBHost=192.168.194.141 #指定数据库所在节点IP
DBName=zabbix_proxy_pasive #指定数据库名称
DBUser=proxy #指定数据库用户
DBPassword=proxy.zabbix #指定数据库用户密码
DBPort=3306
StartPollers=20
Timeout=4
LogSlowQueries=3000
User=zabbix
StatsAllowedIP=127.0.0.13.2.1.3 调整zabbix server页面
在
zabbix server页面中添加agent代理程序。代理程序名称与proxy配置文件中的Hostname名称对应
添加新的主机., 并将代理程序添加为刚添加的被动模式的
agent代理程序。之后等待数据更新即可
3.2.2 主动模式
拓扑

3.2.2.1 配置agent客户端
agent客户端主要需要配置为主动模式, 配置文件如下
root@ubuntu2204:~# grep -i "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
#主要配置下面三个内容即可
Server=192.168.194.135,192.168.194.131
ServerActive=192.168.194.135
Hostname=192.168.194.133
PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Include=/etc/zabbix/zabbix_agentd.d/*.conf3.2.2.2 配置proxy配置文件
[root@proxy zabbix-6.0.27]# grep -i "^[a-Z]" /apps/zabbix_server/etc/zabbix_proxy.conf
Server=192.168.194.131 #指定zabbix-server节点IP
Hostname=xiong-proxy-active #与zabbix server页面中的agent名称相互对应
LogFile=/var/log/zabbix/zabbix_proxy.log
PidFile=/apps/zabbix_server/run/zabbix_proxy.pid
SocketDir=/apps/zabbix_server/run
DBHost=192.168.194.141 #数据库IP
DBName=zabbix_proxy_active #数据库名称
DBUser=proxy #数据库用户名
DBPassword=proxy.zabbix #数据库密码
DBPort=3306 #数据库端口
ConfigFrequency=5 #每次同步配置文件的时间间隔
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
3.2.2.3 调整zabbix server页面
创建主动模式的
agent,在管理-->agent代理程序中直接点击创建 ,代理程序模式的代理地址指向zabbix-proxyIP
创建主动模式主机, 添加过程中
agent代理程序监测调整为刚添加的主动模式代理程序
之后页面显示识别成功

参考链接