概述
Zabbix Proxy 可以替代 Zabbix Server 收集主机设备的性能和可用性数据从而减轻 Zabbix Server 的压力。
Zabbix Proxy 可用于:
- 监控远端位置主机设备
- 监控通信不可靠的位置主机和设备
- 在大规模监控场景减轻 Zabbix Server 压力
- 简化分布式监控的维护
Zabbix Proxy 收集的所有数据在传输到服务器之前都存储在本地数据库。这样就不会因为与服务器的任何临时通信问题而丢失数据。代理配置文件中的ProxyLocalBuffer 和ProxyOfflineBuffer 参数控制数据在本地保存多长时间。
Proxy 从Zabbix Server数据库直接更新最新配置可能会比Zabbix Server新,而Zabbix Server的配置由于CacheUpdateFrequency的原因而无法快速更新。因此,Proxy收集发送Zabbix Server数据可能会被忽略。
Zabbix Server 缓存更新频率, 单位秒。默认60
代码语言:javascript复制CacheUpdateFrequency=60
强制更新zabbix_server缓存
代码语言:javascript复制sudo zabbix_server -R config_cache_reload
Ubuntu 系统优化
优化文件打开数和最大进程数
代码语言:javascript复制egrep -v "*#|^$" /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
优化系统交换分区,虚拟内存,端口最大监听队列,最大文件打开数等参数
代码语言:javascript复制vim /etc/sysctl.conf
vm.swappiness = 0
vm.max_map_count = 262144
net.core.somaxconn = 65535
fs.file-max = 655360
net.ipv4.ip_forward = 1
执行 sysctl -p 生效优化内核参数
代码语言:javascript复制#查看打开最大文件描述符的数量
ulimit -n
#查看用户最大可用的进程数
ulimit -u
#查看vm.swappiness参数
cat /proc/sys/vm/swappiness
#查看vm.max_map_count参数
sysctl -a|grep vm.max_map_count
#查看net.core.somaxconn参数
sysctl -a | grep net.core.somaxconn
#查看fs.file-max参数
cat /proc/sys/fs/file-nr
重启系统
安装Zabbix存储库
代码语言:javascript复制sudo wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1 ubuntu20.04_all.deb
代码语言:javascript复制sudo dpkg -i zabbix-release_6.0-1 ubuntu20.04_all.deb
更新可用软件包列表
代码语言:javascript复制sudo apt update
MySQL
支持字符集 utf8( utf8mb3)和 utf8mb4(分别使用 utf8_bin 和 utf8mb4_bin 排序规则),以便 Zabbix 服务器/代理与 MySQL 数据库正常工作。建议使用 utf8mb4 进行新安装。
安装Mysql
代码语言:javascript复制sudo apt install -y mysql-server
Ubuntu 20.04 系统默认的存储库MYSQL 版本为8.0.28
初始化数据库
代码语言:javascript复制sudo mysql_secure_installation
第一步:
Press y|Y for Yes, any other key for No: N(选择N,不会进行密码的强校验)
第二步:输入两遍你要设置的mysql 密码
New password:
Re-enter new password:
第三步:询问你是否删除匿名用户?
Remove anonymous users? (Press y|Y for Yes, any other key for No) : N(选择N,不删除匿名用户)
第四步:是否取消远程链接?
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N(选择N,允许root远程连接)
第五步:是否删除test数据库?
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N(选择N,不删除test数据库)
第六步:修改的权限是否立即生效?
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y(选择Y,修改权限立即生效)
出现如下的提示,便是设置成功了.
Success.
All done!
创建zabbix库和用户并授权
代码语言:javascript复制#登陆数据库
sudo mysql -uroot -p
#创建zabbix 数据库
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
#创建zabbix 用户
mysql> create user 'zabbix'@'%' identified by 'zabbix@zabbix';
#授权localhost 访问
mysql> grant all privileges on zabbix.* to 'zabbix'@'%';
#刷新策略
flush privileges;
#退出
mysql> quit;
代码语言:javascript复制mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.01 sec)
mysql> create user 'zabbix'@'%' identified by 'zabbix@zabbix';
Query OK, 0 rows affected (0.03 sec)
mysql> grant all privileges on zabbix.* to 'zabbix'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
MYSQL数据库版本
代码语言:javascript复制ubuntu@zabbix-proxy01:~$ mysql -V
mysql Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
注意:Zabbix Server 和 Zabbix Proxy 不能使用同一个数据库。如果它们安装在同一主机上,则代理数据库必须具有不同的名称。
MYSQL 8.0 远程无法连接
MYSQL 只能本机登录,无法进行远程登录,ss -ntl |grep -w 3306 查看数据库默认监听的地址为127.0.0.1。
修改配置文件
代码语言:javascript复制/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
重启数据库
代码语言:javascript复制sudo systemctl restart mysql
安装Zabbix-Proxy
代码语言:javascript复制sudo apt install zabbix-proxy-mysql zabbix-sql-scripts
可选
代码语言:javascript复制sudo apt install zabbix-get zabbix-sender zabbix-agent2
导入数据
导入初始架构:
sudo cat /usr/share/doc/zabbix-sql-scripts/mysql/proxy.sql | mysql -uzabbix -p zabbix
注意:新版本中 Server 和Proxy 数据库初始化文件名称做了区分,Server 为“server.sql ”,Proxy为“proxy.sql”,并且使用同一个名为“zabbix-sql-scripts”的安装包。
zabbix_proxy 配置文件
代码语言:javascript复制ubuntu@zabbix-proxy01:/$ sudo egrep -v "*#|^$" /etc/zabbix/zabbix_proxy.conf
Server=192.168.99.185;192.168.99.186
Hostname=Zabbixproxy01
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix@zabbix
ProxyOfflineBuffer=2
ConfigFrequency=120
DataSenderFrequency=2
StartPollers=30
StartPollersUnreachable=10
StartPingers=1
StartDiscoverers=1
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=512M
Timeout=4
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
启动 Zabbix Proxy进程
代码语言:javascript复制# systemctl restart zabbix-proxy
# systemctl enable zabbix-proxy
Zabbix Proxy 部分参数介绍
代码语言:javascript复制ConfigFrequency=60 #Zabbix Proxy从Zabbix Server取得配置数据的频率
DataSenderFrequency=2 #Zabbix Proxy发送监控到的数据给Zabbix Server的频率
ProxyOfflineBuffer=2 # Proxy或者Server无法连接时,保留离线的监控数据的时间,单位小时
StartPollers=10 #开启多线程数
StartPollersUnreachable=1 #该线程用来单独监控无法连接的主机
StartPingers=10 # fping线程数
CacheSize=64M #用来保存监控数据的缓存数,根据监控主机数量适当调整
Timeout=10 #超时时间,设定不要超过30s,否则会拖慢其他监控数据抓取时间
Zabbix 前端配置
管理 → 代理点击→ 创建代理
Proxy 名称必须与配置文件中的Hostname参数相同
代理模式
主动- Proxy将连接到 Zabbix 服务器并请求配置数据(默认)
被动- Zabbix 服务器连接到Proxy
0 - proxy in the active mode
1 - proxy in the passive mode
官方文档
https://www.zabbix.com/documentation/6.0/en/manual/distributed_monitoring/proxies