Zabbix proxy主动模式的实现

zabbix作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy可以代替zabbix server收集监控数据,然后把数据汇报给zabbix server,所以zabbix proxy可以在一定程度上分担zabbix server的数据收集压力,从而降低数据的采集时间、也相应的增加了zabbix server的监控能力。

zabbix proxy区分主动模式和被动模式,通信方式与zabbix agent主动模式和被动模式一样,区别是zabbix proxy由于没有zabbix agent的配置,所以zabbix proxy在主动模式下要周期性地向zabbix server申请获取zabbix agent的监控项信息,而zabbix proxy在被动模式下也是等待zabbix server的连接并接受zabbix server发送的监控项指令,然后zabbix proxy再向zabbix agent发起请求获取数据。

zabbix proxy对比zabbix server

功能

zabbix proxy

zabbix server

轻量级


相对重量级

图形


带图形控制界面

可以独立工作

是,可以独立采集数据并存储

是,集数据采集、存储、分析、展示于一体

易维护

是,配置完成后基本无需管理

维护也不难

独立数据库

保存少量近期数据

保存指定时间内的所有数据

报警通知

否,代理服务器不发送邮件通知

支持邮件、短信等告警机制

zabbix proxy的版本选择

zabbix proxy的版本必须和zabbix server版本一致,否则会导致出现zabbix proxy与zabbix server不兼容问题

环境准备

五台机器:

zabbix_agent 5.0 被动模式(已安装) Zabbix_java_gateway 5.0 (已安装) 10.0.0.7

MariaDB-10.4.22(已安装) zabbix_server 5.0(已安装) 10.0.0.17

Tomcat-8.5(已安装) 10.0.0.27

zabbix_agent 5.0 主动模式(已安装)10.0.0.37

MariaDB-10.4.22(已安装) zabbix_proxy 5.0 主动模式 10.0.0.47

关闭防火墙和selinux

#关闭selinux
[root@zabbix_proxy ~]#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#关闭防火墙
[root@zabbix_proxy ~]#systemctl disable --now firewalld

#重启生效
[root@zabbix_proxy ~]#reboot

1. 安装zabbix rpm源

[root@zabbix_proxy ~]#rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix_proxy ~]#sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
[root@zabbix_proxy ~]#yum clean all

2. 安装zabbix proxy

[root@zabbix_proxy ~]#yum install -y zabbix-proxy-mysql zabbix-agent

#编辑配置文件 /etc/yum.repos.d/zabbix.repo
[root@zabbix_proxy ~]#vim /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
...
enabled=1
...

3. 创建zabbix proxy数据库

[root@zabbix_proxy ~]#mysql -uroot -p
Enter password:
MariaDB [(none)]> create database zabbix_proxy_active character set utf8 collate utf8_bin;
MariaDB [(none)]> create user proxy@'10.0.0.%' identified by 'proxy';
MariaDB [(none)]> grant all privileges on zabbix_proxy_active.* to proxy@'10.0.0.%';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> quit;

4. 修改zabbix proxy配置文件

[root@zabbix_proxy ~]#vim /etc/zabbix/zabbix_proxy.conf
ProxyMode=0  #0为主动模式,1为被动模式
Server=10.0.0.17  #zabbix server服务器的IP地址或主机名
ServerPort=10051  #zabbix server监听端口,对于处于被动模式的代理,该参数将被忽略
Hostname=zabbix_proxy_active  #代理服务器名称,需要与zabbix server添加代理时的proxy name一致
ListenPort=10051  #zabbix proxy监听端口
EnableRemoteCommands=1  #允许zabbix server执行远程命令
DBHost=10.0.0.47  #数据库服务器IP地址
DBName=zabbix_proxy_active  #数据库名称
DBUser=proxy  #数据库用户名
DBPassword=proxy  #数据库密码
DBPort=3306  #数据库端口
ProxyLocalBuffer=720  #已经提交到zabbix server的数据保留时间
ProxyOfflineBuffer=720  #未提交到zabbix server的数据保留时间
HeartbeatFrequency=60  #心跳检测时间间隔,默认60秒,对于处于被动模式的代理,该参数将被忽略
ConfigFrequency=60  #代理间隔多少秒从zabbix server获取监控信息,对于处于被动模式的代理,该参数将被忽略
DataSenderFrequency=30  #代理将每隔多少秒向zabbix server发送收集的数据,对于处于被动模式的代理,该参数将被忽略
StartPollers=6  #启动的数据采集器数量
StartPollersUnreachable=3  #不可达主机的轮询进程的初始实例启动数量
StartTrappers=5  #预启动的Trappers进程数量
StartPingers=3  #ICMP ping进程的初始实例数量
JavaGateway=10.0.0.7  #JavaGateway服务器IP地址
JavaGatewayPort=10052  #JavaGateway服务端口
StartJavaPollers=5  #启动多少个线程采集数据
ListenIP=0.0.0.0  #监听地址
HousekeepingFrequency=1  #多少小时清理一次代理端数据库的 history数据
CacheSize=16M  #配置缓存大小
StartDBSyncers=4  #zabbix和数据库同步数据的进程数量
HistoryCacheSize=16M  #保存监控项的历史缓存大小
HistoryIndexCacheSize=16M  #历史数据索引缓存的大小
Timeout=30  #监控项的超时时间,单位为秒
LogSlowQueries=3000  #多久的数据库查询会被记录到日志,单位为毫秒

[root@zabbix_proxy ~]#grep "^[a-Z]" /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=10.0.0.17
ServerPort=10051
Hostname=zabbix_proxy_active
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
EnableRemoteCommands=1
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=10.0.0.47
DBName=zabbix_proxy_active
DBUser=proxy
DBPassword=proxy
DBPort=3306
ProxyLocalBuffer=720
ProxyOfflineBuffer=720
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=30
StartPollers=6
StartPollersUnreachable=3
StartTrappers=5
StartPingers=3
JavaGateway=10.0.0.7
JavaGatewayPort=10052
StartJavaPollers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
ListenIP=0.0.0.0
HousekeepingFrequency=1
CacheSize=16M
StartDBSyncers=4
HistoryCacheSize=16M
HistoryIndexCacheSize=16M
Timeout=30
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

5. 查看数据库

[root@zabbix_proxy ~]#mysql -uproxy -pproxy -h10.0.0.47
MariaDB [(none)]> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| zabbix_proxy_active |
+---------------------+

6. 主动模式导入数据库

[root@zabbix_proxy ~]#cd /usr/share/doc/zabbix-proxy-mysql-5.0.25/
[root@zabbix_proxy zabbix-proxy-mysql-5.0.25]#gunzip schema.sql.gz
[root@zabbix_proxy zabbix-proxy-mysql-5.0.25]#mysql -uproxy -pproxy -h10.0.0.47 zabbix_proxy_active
MariaDB [zabbix_proxy_active]> source /usr/share/doc/zabbix-proxy-mysql-5.0.25/schema.sql

7. 启动zabbix proxy进程

#启动zabbix proxy进程,并设置开机自启
[root@zabbix_proxy ~]#systemctl enable --now zabbix-proxy.service zabbix-agent.service
[root@zabbix_proxy ~]#systemctl status zabbix-proxy.service zabbix-agent.service
[root@zabbix_proxy ~]#systemctl status zabbix-proxy.service zabbix-agent.service
● zabbix-proxy.service - Zabbix Proxy
   Loaded: loaded (/usr/lib/systemd/system/zabbix-proxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-07-14 19:04:18 CST; 13s ago
  Process: 2311 ExecStart=/usr/sbin/zabbix_proxy -c $CONFFILE (code=exited, status=0/SUCCESS)

● zabbix-agent.service - Zabbix Agent
   Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-07-14 19:04:16 CST; 15s ago
  Process: 2312 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)

[root@zabbix_proxy ~]#ss -ntl
State      Recv-Q Send-Q              Local Address:Port                             Peer Address:Port
LISTEN     0      128                             *:22                                          *:*
LISTEN     0      100                     127.0.0.1:25                                          *:*
LISTEN     0      128                             *:10050                                       *:*
LISTEN     0      128                             *:10051                                       *:*
LISTEN     0      128                          [::]:22                                       [::]:*
LISTEN     0      100                         [::1]:25                                       [::]:*
LISTEN     0      128                          [::]:10050                                    [::]:*
LISTEN     0      80                           [::]:3306                                     [::]:*

8. zabbix web添加主动代理

点击【管理-agent代理程序-创建代理】

zabbix_proxy在空闲状态下进程占用CPU很高是什么问题 zabbix proxy mode_linux

9. zabbix agent使用主动代理

修改或者新添加一台zabbix agent,并使用zabbix主动模式代理服务器进行监控

点击【配置-主机-10.0.0.37-web2】

zabbix_proxy在空闲状态下进程占用CPU很高是什么问题 zabbix proxy mode_mysql_02

10. 修改zabbix agent配置文件

[root@centos7 ~]#vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.17,10.0.0.47  #zabbix server与zabbix active代理的地址
ServerActive=10.0.0.47  #修改zabbix agent中配置文件ServerActive的值为主动模式zabbix proxy

[root@centos7 ~]#grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.17,10.0.0.47
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=5
ServerActive=10.0.0.47
Hostname=10.0.0.37
Timeout=30
Include=/etc/zabbix/zabbix_agentd.d/*.conf

[root@centos7 ~]#systemctl restart zabbix-agent.service

11. zabbix web验证当前主机状态

zabbix_proxy在空闲状态下进程占用CPU很高是什么问题 zabbix proxy mode_数据_03

12. 验证主机监控数据

zabbix_proxy在空闲状态下进程占用CPU很高是什么问题 zabbix proxy mode_数据_04