Zabbix-Proxy可以代替Zabbix-Server从终端设备收集性能和可用性数据的服务。是Zabbix分布式架构中十分重要的组件。本教程中将介绍如何在CentOS 8上安装、优化和配置Zabbix Proxy 5.0 LTS或5.4 Standard版本。

STEP 1. 设置Selinux

将Selinux设置为permissive模式

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

STEP 2. 配置防火墙

firewall-cmd --add-service={http,https} --permanent
firewall-cmd --add-port={10051/tcp,10050/tcp} --permanent
firewall-cmd --reload

STEP 3. 安装Zabbix Proxy

必须注意的是,你的Zabbix-Proxy版本必须要和Zabbix-Server版本匹配,你可以使用如下命令来确认Zabbix-Server版本:

[root@localhost ~]# zabbix_server -V
zabbix_server (Zabbix) 5.0.6

Zabbix 5.0:

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
dnf clean all
dnf -y install zabbix-proxy-mysql

Zabbix 5.4:

rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
dnf clean all
dnf -y install zabbix-proxy-mysql zabbix-sql-scripts

STEP 4. 配置数据库

安装和启用MariaDB
dnf -y install mariadb-server && systemctl start mariadb && systemctl enable mariadb
设置MySQL Root密码

输入如下命令初始化配置:

mysql_secure_installation

配置步骤和参数供参考:

Enter current password for root (enter for none): 敲回车
Set root password? [Y/n]: Y
New password: <Enter root DB password>
Re-enter new password: <Repeat root DB password>
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y

这里为root用户创建了一个MariaDB密码。

创建数据库
mysql -uroot -p
Enter password:
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]> create user zabbix@localhost identified by 'your zabbix DB password';
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix@localhost;
MariaDB [(none)]> quit;

这里创建了一个名为zabbix_proxy的数据库,然后创建了一个名为zabbix的用户,把'your zabbix DB password'中''里面的内容替换为你自己的密码。

导入初始数据

Zabbix 5.0:

zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uzabbix -p  zabbix_proxy

Zabbix 5.4:

zcat /usr/share/doc/zabbix-sql-scripts/mysql/schema.sql.gz | mysql -uzabbix -p  zabbix_proxy

STEP 5. 配置Zabbix Proxy

本案例中,此Zabbix-Proxy将命名为zabbix_proxy_01,Zabbix-Server服务器地址为192.168.10.130。
编辑配置文件/etc/zabbix/zabbix_proxy.conf:

vi  /etc/zabbix/zabbix_proxy.conf

修改如下配置:

DBPassword= your zabbix DB password
ConfigFrequency= 100
Server=192.168.10.130
Hostname=zabbix_proxy_01
DBName=zabbix_proxy
DBUser=zabbix

ConfigFrequency参数定义了Zabbix-Proxy以秒为单位从Zabbix-Server获取配置数据的频率,默认为3600秒。

STEP 6. 启动Zabbix Proxy进程

systemctl restart zabbix-proxy && systemctl enable zabbix-proxy

STEP 7. 在Zabbix-Server网页端设置Proxy

如图所示进行配置:

至此,你已经在CentOS 8上成功安装了Zabbix-Proxy。下面是一些优化设定,请根据实际情况设定。

STEP 8. (可选)配置 PSK 加密

Zabbix服务器和代理之间可以使用TLS 1.2协议通信。可以使用证书或预共享密钥(PSK)加密。
这里介绍PSK加密方式。

在Zabbix-Proxy上生成PSK密钥
[root@localhost ~]# openssl rand -hex 32
3c17b47bd7795e341f9be4666b8a73643e6ef0aa0b21428df799c55a14203234

使用命令vi /etc/zabbix/zabbix_proxy.psk创建并打开文件zabbix_proxy.psk,然后将新生成的密钥复制粘贴到其中并保存。
设置权限:

chown zabbix:zabbix /etc/zabbix/zabbix_proxy.psk
chmod 644 /etc/zabbix/zabbix_proxy.psk
在Zabbix-Proxy上配置PSK加密

编辑配置文件/etc/zabbix/zabbix_proxy.conf:

vi  /etc/zabbix/zabbix_proxy.conf

修改如下配置:

TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/etc/zabbix/zabbix_proxy.psk
TLSPSKIdentity=ZBX-PSK-01

重启服务:

systemctl restart zabbix-proxy
在 Zabbix-Server网页端的代理上启用PSK加密

如图所示进行配置:

STEP 9. (可选)优化Zabbix-Proxy

如果你监控的设备不多,就没必要进行此步骤,但如果计划监控大量设备,请执行此步骤。
编辑配置文件/etc/zabbix/zabbix_proxy.conf

vi  /etc/zabbix/zabbix_proxy.conf

在任何位置加入如下参数:

StartPollers=100
StartPollersUnreachable=50
StartPingers=50
StartTrappers=10
StartDiscoverers=15
StartHTTPPollers=5
CacheSize=128M
HistoryCacheSize=64M
HistoryIndexCacheSize=32M

请根据实际情况进一步优化,假设您不使用 ICMP 检查,则将StartPingers参数设置为1,或者如果您不使用活动代理,则将StartTrappers设置为1。您可以在官方文档中找到有关Zabbix配置文件中支持的参数的更多信息 。

STEP 10. (可选)优化MySQL/MariaDB数据库

创建自定义MySQL配置文件

通过命令vi /etc/my.cnf.d/zabbix_db.cnf创建zabbix_db.cnf数据库配置文件:

vi /etc/my.cnf.d/zabbix_db.cnf

然后粘贴如下配置:

[mysqld]
max_connections                = 280
innodb_buffer_pool_size        = 1G

innodb-log-file-size           = 128M
innodb-log-buffer-size         = 128M
innodb-file-per-table          = 1
innodb_buffer_pool_instances   = 8
innodb_old_blocks_time         = 1000
innodb_stats_on_metadata       = off
innodb-flush-method            = O_DIRECT
innodb-log-files-in-group      = 2
innodb-flush-log-at-trx-commit = 2

tmp-table-size                 = 96M
max-heap-table-size            = 96M
open_files_limit               = 65535
max_connect_errors             = 1000000
connect_timeout                = 60
wait_timeout                   = 28800

赋予权限:

chown mysql:mysql /etc/my.cnf.d/zabbix_db.cnf
chmod 644 /etc/my.cnf.d/zabbix_db.cnf

这样设定后可以避免一些报错,比如参数max_connections = 404可以解决这个报错:“[Z3001] connection to database 'zabbix_proxy' failed: [1040] Too many connections”。值得注意的是max_connections参数必须大于所有Zabbix代理进程总数+150,我们可以使用如下命令计算出来:

[root@localhost ~]# egrep "^Start.+=[0-9]" /etc/zabbix/zabbix_proxy.conf | awk -F "=" '{s+=$2} END {print s+150}'
201

还有一个比较重要的参数是innodb_buffer_pool_size,这个参数决定了MySQL可以获得多少内存来缓存 InnoDB表和索引数据。如果服务器只运行了数据库,我们建议将这个值设定为系统内存的70%,这里我们还运行了Zabbix-Proxy服务,我们建议将这个值设定为系统内存的50%。假如系统内存为2G,那么这个值为1G。

重启进程
systemctl restart zabbix-proxy 
systemctl restart mariadb