提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文旨在以一个简单的案例实现server与proxy监控web主机,扩展应用,实现zabbix的钉钉机器人报警。

主机名 eth0IP地址 连接互联网的网卡IP 服务名称
zabbixsever 192.168.88.15 192.168.10.142 zabbixserver、agent
zabbixproxy 192.168.88.14 192.168.10.141 zabbixproxy
web3 192.168.88.13 无(模拟内网中的主机) agent

一、环境准备

这里server和proxy、web都在同一网段(不够严谨),其实应该是proxy和web在同一网段,server在其它网段,web不能直接与server通信,需要将数据发给proxy,由proxy再交给server、这是一个主动监控的过程。这里姑且模拟一下。为了便于装包,让server和proxy配置为双网卡,一张网卡用于内部通信,一张网卡用于连接互联网。三台机器安装rocky8.6,配置LNMP环境,这里nginx也不在需要单独安装,在zabbix的官方库中提供了相应的依赖包,详情参考后续配置说明。

二、zabbixserver与zabbixproxy的应用场景介绍

1. Zabbix Server

Zabbix Server 是整个 Zabbix 监控系统的核心,负责集中管理、存储和处理从代理端(Proxy)或受监控主机(Agent)收集到的数据。它还负责生成监控图表、告警、通知等。

应用场景:

  • 单一监控中心:Zabbix Server 在小型或中型企业中常作为集中式监控的核心。所有受监控的设备和系统直接向 Zabbix Server 上报数据,适合资源不是很分散,监控需求较集中的情况。
  • 较少或单一网络环境:当受监控设备都在同一个网络环境中,并且没有跨地区分布时,使用 Zabbix Server 配合 Agent 直接收集数据是较为简单高效的方式。

适用场景总结:

  • 网络环境简单,所有设备集中在一个或多个局域网内。
  • 数据处理和存储的负载相对较小,Zabbix Server 能够承载。
  • 不涉及大规模的监控分布式管理。

2. Zabbix Proxy

Zabbix Proxy 是 Zabbix 监控架构中的一个辅助组件,通常部署在远程网络或分支机构,用于收集和缓存数据,然后将数据定期发送给 Zabbix Server。Zabbix Proxy 可以帮助减轻 Zabbix Server 的负担,特别是在处理大规模分布式环境时。

应用场景:

  • 分布式监控:在跨地域、大规模的网络环境中,Zabbix Proxy 作为中介收集本地数据,然后定期将数据汇总到 Zabbix Server,减少了网络带宽和延迟的影响。
  • 多网络环境:当网络分布在不同的地理位置(如多个数据中心、分支机构等),而这些地方可能无法直接访问 Zabbix Server 时,Zabbix Proxy 可以充当数据中转站,集中管理各个子网的数据。
  • 提高可扩展性:通过使用多个 Zabbix Proxy,可以有效地将监控负载分散到多个代理节点,避免将所有监控数据都直接发送到 Zabbix Server 上,尤其是在大规模监控系统中。
  • 减少网络负载和延迟:尤其是对于远程地点或无法稳定连接到 Zabbix Server 的环境,Zabbix Proxy 可以在本地收集并缓存在本地缓存中,定期上传数据到 Server。这样就减少了跨网络的实时传输压力,适合带宽有限或网络不稳定的场景。

适用场景总结:

  • 网络和监控对象分布在多个地点,跨地域、跨数据中心。
  • 网络带宽有限或稳定性差,无法直接将所有数据流量发送到 Zabbix Server。
  • 需要提高监控系统的可扩展性和可靠性,避免集中式架构的瓶颈。

二、zabbixserver配置过程

1.装包

 安装zabbix安装源
rpm -Uvh  https://repo.zabbix.com/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8.noarch.rpm

dnf clean all

2.切换PHP版本

dnf module switch-to php:7.4

3.安装Zabbix server,Web前端,agent

dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent

4.切换mariadb版本

zabbix6.0版本所要求的的mariadb软件包的版本10.05.00较高,系统自带的mariadb软件包最高只有10.03.28不能满足需要,部署后会出现无法启动zabbix-server的问题
dnf module list mariadb                     ----查询 mariadb版本绑定
dnf module reset mariadb                   ----重置mariadb版本绑定

dnf module enable mariadb:10.5             -----选定mariadb版本绑定

切换成功安装成功如下图:

5.安装数据库10.05.00

dnf install mariadb-server -y

6.启动数据库并设置为开机自启

systemctl enable  mariadb  --now

7.进入MySQL创建zabbix库、授权用户

[root@zabbixserver ~]#mysql
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'zabbix';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;

8.导入zabbix数据库的初始化表

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

9.修改zabbix配置文件连接数据库

说明:其他与数据库相关的字段默认是zabbix,只需要将密码字段确认一下,如果前面设置的库和密码是自定义的,那么可以在这个配置文件中找到对应的字段改为自己前面设置的库和密码。

vim /etc/zabbix/zabbix_server.conf
DBPassword=zabbix  -----找到该字段输入密码 使应用程序可以访问到数据库

10.修改nginx配置文件,为zabbix前端配置PHP

说明:在早期的一些版本中,需要配置nginx动静分离的环境

# vim /etc/nginx/conf.d/zabbix.conf
写成如下,将前面的#去掉:
listen 8080;
server_name 本服务器电脑的IP地址(这里不用IP,直接取消注释也行);

#比如为10.8.8.91 就应该改为server_name 10.8.8.91

11.启动相关服务,并配置开机自动启动

systemctl restart zabbix-server zabbix-agent nginx php-fpm

systemctl enable zabbix-server zabbix-agent nginx php-fpm

12.关闭防火墙和selinux访问测试

关闭防火墙:

systemctl stop firewalld.service #停止firewalld服务

systemctl disable firewalld.service #设置开机默认不启动


关闭selinux:

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

getenforce #查看状态

浏览器访问测试,根据提示下一步下一步,数据地址和密码留意一下不要输错就行,点击登录的时候zabbix默认的管理员用户名为:Admin,A是大写的!密码是小写zabbix

http://192.168.88.15:8080/


12.补充MySQL初始化安全脚本,用于设置MySQL的root密码等

使用以下命令初始化 mariadb 并配置 root 密码:zabbix

执行命令:mysql_secure_installation
直接回车,空
是否设置密码:y
输入设置密码:zabbix
再次输入密码:zabbix
是否移除anonymous用户:y
是否不允许root远程登录:n
是否移除test数据库:y
是否更新:y

三、zabbixproxy的搭建

注意的问题(重要):

这里的zabbix版本,server和proxy需要安装一致的版本,才能正常的交换信息,版本不一致发送信息的协议不一致不能正常通信,proxy和server自己用自己的数据库,避免数据相互干扰和性能问题,如果共用一个数据库,会出现一个host  not found的问题。

1.第一步、同server

2.第二步,同server

3.第三步装包如下:

dnf install -y gcc libevent libevent-devel fping libssh2 libssh2-devel net-snmp net-snmp-devel   #proxy相关的依赖包和功能包

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.rpm
 #自动为你添加 Zabbix 6.0.x 的官方仓库

dnf install -y zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy

#如果你使用的是 PostgreSQL 存储,可以安装:
#dnf install -y zabbix-proxy-pgsql zabbix-sql-scripts zabbix-selinux-policy
#根据你的环境选择适合的代理包

4.安装数据库mariadb、同server

5.数据库版本10.05.00、同server

6.启动数据库、同server

7.进入proxy自己的MySQL设置

授权的时候可以补充两个对本机和本机IP的授权,不然数据库连接可能失败:

grant ALL PRIVILEGES ON zabbix_proxy.* to 'zabbix'@'192.168.88.14';

grant ALL PRIVILEGES ON zabbix_proxy.* to 'zabbix'@'localhost';

【报错】

解决办法:

create 一个新用户、不写localhost,对新用户授权

MariaDB [(none)]> GRANT ALL PRIVILEGES ON zabbix_proxy.* TO 'zabbix'@'192.168.88.13';
ERROR 1133 (28000): Can't find any matching row in the user table
 

CREATE DATABASE zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
GRANT ALL PRIVILEGES ON zabbix_proxy.* TO 'zabbix'@'192.168.88.13';
FLUSH PRIVILEGES;
QUIT;

8.将 proxy.sql 脚本导入到数据库中,设置表结构:

cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy
#在执行时,它会要求你输入 MySQL 用户 zabbix 的密码

9.配置zabbixproxy,修改文件:vim /etc/zabbix/zabbix_proxy.conf   可以设置proxy代理监控为被动式,即等待server连接proxy来索要监控数据,默认proxymode置位为0,那么是主动式的。这里我用的是被动式,其他参数修改参考下面第二张图。

vim /etc/zabbix/zabbix_proxy.conf

DBHost=192.168.88.14
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
Hostname=zabbixproxy
Server=192.168.88.15
LogFile=/var/log/zabbix/zabbix_proxy.log
PidFile=/var/run/zabbix/zabbix_proxy.pid

配置说明:

DBHost: 数据库主机地址(通常是 localhost 或数据库服务器的 IP 地址)

DBName: 数据库名称(此处为 zabbix_proxy)

DBUser: 数据库用户名(此处为 zabbix)

DBPassword: 数据库密码(即你在创建用户时指定的密码)

Hostname: 代理主机名(通常是代理服务器的 FQDN 或 IP)

Server: Zabbix 服务器的 IP 或 FQDN,代理会将数据发送到 Zabbix 服务器

LogFile: 日志文件路径

PidFile: 进程 PID 文件路径

10.启动服务

systemctl enable zabbix-proxy.service --now

sudo systemctl status zabbix-proxy

如果没有报错,则说明 Proxy 已经成功启动。

11. 在Zabbix Server的web页面 添加 Proxy

最后,登录到 Zabbix Server 的 Web 界面,配置该 Proxy。注意添加的代理名称一定要和你proxy配置文件中的HostName字段配置的名称一致,否则会在日志中提示xxx代理找不到。

找不到对应的名称,可以先修改语言模式为英文:

登录 Zabbix Server Web 界面。

进入 Configuration → Hosts。

点击 Create Host,在 Host Name 中填入代理的名称(例如:zabbix_proxy_host)。

在 Templates 中选择一个合适的模板(例如 Linux by Zabbix agent)。

在 Monitored by proxy 下,选择刚才配置的 Proxy。

保存配置后,Zabbix Server 会开始从 Proxy 收集数据。

以下以server 的修改为参照;server其实可以不改

12. 查看proxy日志是否通信正常

可以再开一个终端,查看 Proxy 的日志文件,以确保其正常运行

tail -f /var/log/zabbix/zabbix_proxy.log

四、agent部署

1、安装zabbix源仓库

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-2.el8.noarch.rpm

# dnf clean all
2、安装zabbix客户端agent

dnf install zabbix-agent

3、配置zabbix-agent.conf文件

修改/etc/zabbix/zabbix_agentd.conf

Server=proxy服务器IP
ServerActive=proxy服务器IP
 Hostname=本机主机名或IP地址

然后启动zabbix-agent服务,并设为开机自启

systemctl enable zabbix-agent --now

4.在zabbixserver界面配置添加主机

当可用性出现绿色“ZBX”,说明连接客户端成功,可以正常监控客户端的设备,这个不会马上变成绿色,可以在:检测中===》最新数据找到这个主机刷新一下,正常能获取到数据,说明已经可用,有时候会出现server和proxy数据同步较慢的问题,那么proxy日志中会提示:web3主机192.168.88.13 not known 等字样这时候在server端执行如下命令,强制server和proxy同步一下数据:

zabbix_server -R proxy_sync

proxy_sync 是在 Zabbix 6.4 才引入的新功能(对应 ZBXNEXT-7134 需求),所以在 6.2.x 中执行会提示 unknown option "proxy_sync" 是正常的

[root@zabbixserver ~]# zabbix_server -R proxy_sync
zabbix_server [54284]: Cannot perform runtime control command: unknown option "proxy_sync"
 

重启 zabbix_proxy 后会立刻去 server 拉取配置

systemctl restart zabbix-proxy
 

总结:

本文旨在自己测试时候搭建的,亲测可用,效果图如下:

Logo

更多推荐