3-proxy架构详解

熊 0 阅读 监控平台


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架构里面, 同样支持主动模式和被动模式,但是被动模式一般比较少用。

1769223-20200223125447699-666539079

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

    1. 安装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
    2. 安装proxy包

      # apt install zabbix-proxy-mysql zabbix-sql-scripts
    3. 创建数据库

      # 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;
    4. 导入数据库数据

      cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy
    5. 配置完成之后 ,重启服务即可

      # systemctl restart zabbix-proxy
      # systemctl enable zabbix-proxy
  • centos8

    1. 安装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
    2. 安装proxy包

       dnf install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy
    3. 创建数据库

      # 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;
    4. 导入数据库数据

      # cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy
    5. 配置完成之后 ,重启服务即可

      # 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 -y

ubuntu依赖包安装

apt install libmysqld-dev libmysqlclient-dev libxml2-dev  libxml2 snmp libsnmp-dev libevent-dev curl libcurl4-openssl-dev

3.1.2.1 ubuntu2204

  1. 环境准备

    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/
  2. 安装依赖软件

    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
  3. 编译安装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 
    ​
  4. 在数据库节点创建对应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)
    ​
  5. 导入数据库信息

    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 
    ​
  6. 准备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

  1. 环境准备

    [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/
    ​
  2. 安装依赖包

    [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
  3. 编译

    [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 
  4. 准备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)
    ​
  5. 导入数据库数据

    [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 
    ​
  6. 准备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 被动模式配置

被动模式不常用。一般使用主动模式

拓扑

zabbix-proxy-pasive-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.1

3.2.1.3 调整zabbix server页面

  1. 在zabbix server页面中添加agent代理程序。代理程序名称与proxy配置文件中的Hostname名称对应

    image-20240315172031811
  2. 添加新的主机., 并将代理程序添加为刚添加的被动模式的agent代理程序。之后等待数据更新即可

    image-20240315172209471

3.2.2 主动模式

拓扑

zabbix-proxy-active

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/*.conf

3.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页面

  1. 创建主动模式的agent,在管理-->agent代理程序中直接点击创建 ,代理程序模式的代理地址指向zabbix-proxyIP

    image-20240315180209663
  2. 创建主动模式主机, 添加过程中agent代理程序监测调整为刚添加的主动模式代理程序

    image-20240315180529483
  3. 之后页面显示识别成功

    image-20240315182701779


参考链接

3 Proxy (zabbix.com)