部署Zabbix企业级分布式监控

一、监控系统的功能概述

在 IT 运维领域,监控是至关重要的环节,按比例估算,其在 IT 运维工作中占比可达 30%。构建一个真正可用的监控告警系统对 IT 运维工程师而言是一项艰巨任务,而优秀的监控系统更是寥寥无几。

从中文字义来讲,监控包含检测和控制两方面内容,核心在于检测与预防,对应的英文单词是 "Monitoring"。在计算机领域,监控可分为应用性能监控、业务交易监控、网络性能监控、操作系统监控等类型,这些类型将监控概念划分为多个领域,日常所说的监控通常模糊涵盖这些细分领域。在任何 IT 业务环境中,都存在着各种硬件设备、软件应用等,需要通过监控来保障其正常运行。

按照逻辑层次划分,监控行为可分为五个层次,每个层次都有其特定的监控对象和核心指标:

基础设施监控:由运维人员负责,接近硬件体系,涉及网络、交换机、路由器等低层设备。这些设备的可靠性和稳定性直接影响上层服务应用,因此需监控网络流量、丢包情况、错包情况、连接数等核心指标。

系统层监控:涵盖物理机、虚拟机、操作系统等,主要监控 CPU 使用率、内存占用率、磁盘 IO 和网络带宽等核心指标。

应用层监控:与服务紧密相关,包括 URL 访问性能、调用数、延迟,服务错误率,SQL 监控(如慢 SQL),缓存命中率和性能,每个服务的响应时间等。

业务监控:针对具体业务场景,如交易网站的用户登录、注册、下单、支付等情况。这层监控数据可提供给运营和公司高管,为公司战略决策和方向提供数据支撑。

端用户体验监控:关注用户通过 APP、H5、PC 端等使用应用程序时的体验,包括用户端性能、返回码、不同城市地区及运营商的使用情况,客户端操作系统和浏览器版本等,避免因 BUG 或性能问题影响用户体验而未被感知。

二、监控系统的实现原理

(一)模块组成

一个监控系统的基本模型大体由两部分组成,即数据采集部分和数据存储、分析告警、展示部分。其中,Server 承担分析、告警、数据存储和展示的功能,Agent 负责数据采集。

(二)采集协议

按照支持的协议方式,监控 IT 数据采集可分为专用客户端采集和公用协议采集。专用客户端采集基于私有协议,而公用协议采集则支持 SNMP、IPMI、SSH、Telnet 等协议。

(三)监控模式

监控系统数据采集的工作模式有被动模式和主动模式两种。被动模式是服务器端到客户端采集数据,此模式对监控端服务器开销较大,适合小规模监控环境;主动模式是客户端主动上报数据到服务器,对监控端服务器开销较小,适合大规模监控环境。

(四)代理架构

在大规模监控环境中,由于被监控节点多、监控类型多,监控产生的数据和网络连接开销大。除采用主动模式外,还需使用代理架构来分摊服务器端性能开销,且代理架构支持跨地域、跨网络的分布式监控。常见的代理架构为 C/S/P 架构,即 Client/Proxy/Server。

三、监控系统的开源产品

市面上有多种开源监控产品,各有其特点和适用场景:

Zabbix:出色的企业级运维监控平台,可监控服务器、网络设备、Web 应用程序和数据库等的性能和可用性,能在 Linux、AIX、Windows 等多种系统上安装使用,适配能力良好。

Prometheus+Grafana:Prometheus 是开源系统监控和警报工具包,主要用于基础设施监控,包括服务器、数据库、Web 服务等,几乎所有东西都可通过其监控。

Cacti:网络流量监测图形分析工具,连接到 RRD Tool 生成网络数据相关图表,具有强大的数据和用户管理功能,可与 LDAP 结合进行用户验证,还能自行增加模板。

Nagios:监控系统运行状态和网络信息的系统,可监控本地或远程主机及服务,提供异常通知功能,能监控网络协议、操作系统、系统指标等几乎所有类型组件。

Checkmk:高可扩展的监控工具,可整合服务器、网络、资产、数据库等监控,有基础版(完全开源免费无限制)和企业版(附带附加功能),具有部署快、高度自动化、配置灵活的特点。

OpenNMS:企业级基于 Java/XML 的分布式网络和系统监控管理平台,能显示网络中终端和服务器的状态和配置,专为 Linux 设计,也支持 Windows、Solaris 和 OS X,可通过多种协议收集系统指标。

Netdata:Linux 性能实时监测工具,为 Linux 系统、应用程序、SNMP 服务等提供实时性能监测,可在物理系统、虚拟机、容器等多种设备上运行,监控指标多而广,数据收集速度快,支持并发监控数万个指标,有交互式可视化和健康警报功能。

LibreNMS:开源、功能丰富且强大的网络监控系统,易于安装和配置,可在多种平台使用,支持多种协议、性能监控、警报等功能,支持广泛的供应商、设备和协议,还能自动发现整个网络。

四、Zabbix 系统概述

(一)初识 Zabbix

Zabbix 是企业级的分布式开源监控系统解决方案,基于 Web 界面提供分布式系统监控和网络监控功能。由 Alexei Vladishev 创建,目前由 Zabbix SIA 主导开发和支持。

Zabbix 可监控服务器、网络设备、Web 应用程序、数据库等的健康和完整性,使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,以便快速响应服务器问题。它基于存储的数据提供出色的报告和数据可视化功能,是容量规划的理想选择。

Zabbix 支持轮询和 trapping,所有报告、统计数据和配置参数都可通过基于 Web 的前端访问,确保能从任何位置评估网络状态和服务器健康状况。无论对于小型组织还是大公司,配置得当的 Zabbix 都能在监控 IT 基础设施方面发挥重要作用。

Zabbix 是免费的,在 GPL 通用公共许可证第 2 版下编写和分发,源代码免费分发,可供公众使用。

(二)Zabbix 的功能特性

数据收集:支持可用性及性能检测,支持 SNMP(trapping 及 polling)、IPMI、JMX 监控,可自定义检测和收集数据间隔,包含 Server、Proxy、Agent 三种角色。

灵活的阈值定义:允许自定义问题阀值(在 Zabbix 中称为触发器),并存储在后端数据库中。

高级告警配置:可自定义告警升级、接收者及告警方式,告警信息可配置并允许使用宏变量,能通过远程命令实行自动化动作。

实时绘图:通过内置绘图方法实现监控数据实时绘图。

扩展的图形化显示:允许自定义创建多监控项视图,生成网络拓扑、自定义面板和幻灯片并在 dashboard 页面显示,还能生成监控报告。

历史数据存储:数据存储在数据库中,历史数据可配置,且有内置数据清理机制。

配置简单:一次配置可终生监控(除非调整或删除),允许使用模板添加监控设备。

模板使用:模板中可添加组监控,且模板允许继承。

网络自动发现:能自动发现网络设备、实现 Agent 自动注册,自动发现文件系统、网卡设备、SNMP OID 等。

快速的 Web 接口:Web 前端采用 PHP 编写,访问无障碍。

Zabbix API:提供程序级别的访问接口,方便第三方程序接入。

权限系统:具备安全的权限认证,用户可限制允许维护的列表。

全特性、Agent 易扩展:可在监控目标上部署,支持 Linux 及 Windows。

二进制守护进程:采用 C 语言开发,高性能、低内存消耗,且易移植。

具备应对复杂环境情况:通过 Zabbix Proxy 可轻松创建远程监控。

(三)Zabbix 角色及架构

Zabbix Server:zabbix_server 是 Zabbix 服务端守护进程,Zabbix Agentd、Zabbix Proxy 的数据最终都会提交到 Server,不过并非所有数据都主动提交,也有 Server 主动获取的情况。

Zabbix Agent:zabbix_agentd 是客户端守护进程,主要用于收集客户端数据,如 CPU 负载、内存、硬盘使用情况等。

Zabbix Proxy:zabbix_proxy 是 Zabbix 代理守护进程,功能类似 Server,但只是中转站,需将收集到的数据提交或被提交到 Server。

Zabbix Web:Zabbix 的 web 界面,管理员通过它管理 Zabbix 配置及查看监控信息,通常与 zabbix_server 运行在同一台主机,也可单独部署在独立服务器上。

Zabbix 整体架构中,各组件通过特定端口进行通信,支持主动模式和被动模式的数据采集,还支持无 Agent 监控检测方式,从 zabbix server 对外发起数据请求,数据库采用 MySQL、Oracle、PostgreSQL、SQLite 等。

五、部署流程

(一)资源清单

操作系统 配置 主机名 IP 角色
openEuler 24.03 2C4G zabbix 192.168.207.137 Zabbix 服务端
openEuler 24.03 2C4G proxy 192.168.207.138 Zabbix proxy
openEuler 24.03 2C4G server01 192.168.207.139 被监控节点
openEuler 24.03 2C4G server02 192.168.207.140 被监控节点

(二)基础环境配置

关闭防火墙

复制代码
[root@localhost~]#systemctl stop firewalld
[root@localhost ~]#systemctl disable firewalld

关闭 Selinux

复制代码
[root@localhost ~]#setenforce0

时间同步

复制代码
[rootelocalhost ~]#timedatectl set-timezone Asia/Shanghai
[root@localhost~]#chronyc sources -v

修改主机名

复制代码
[root@localhost ~]#hostnamectl set-hostname zabbix
[root@localhost~]#hostnamectl set-hostname proxy
[root@localhost~]#hostnamectl set-hostname server01
[root@localhost~]#hostnamectl set-hostname server02

(三)部署 Zabbix Server

添加 Zabbix 源

复制代码
[root@zabbix~]#rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
[root@zabbix ~]#dnf clean all

安装软件包

复制代码
[root@zabbix ~]#dnf-y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
[root@zabbix ~]#dnf-y install mysql-server-8.0.41 mysql
[root@zabbix ~]#dnf-y install https://w.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm

备注:zabbix6.4.8 需要的各个平台软件的版本如下:mysql 的版本要求 8.0.30-8.1.X,mariadb 的版本要求 10.5.00-11.1.X,nginx 的版本要求 1.20or Later,php 的版本要求 7.4.0-8.2.X。

配置数据库

复制代码
[root@zabbix ~]#systemctl enable mysqld--now 
[root@zabbix ~]# mysql -uroot 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 8 
Server version: 8.0.41 Source distribution 
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
mysql>
#执行以下SQL语句 
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.*to zabbix@localhost;
create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'zabbix';
create user zabbix@'%'identified by 'zabbix';
grant all privileges on zabbix_proxy.*to zabbix@localhost;
grant all privileges on zabbix_proxy.*to zabbix@'%';
set global log_bin_trust_function_creators=1;
quit;

导入数据

复制代码
[root@zabbix ~]#zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz|mysql--default-character-set=utf8mb4 -uzabbix -p zabbix
[root@zabbix ~]##mysql -uroot -p
mysql>set global log_bin_trust_function_creators= 0;
mysql>quit;

配置 Zabbix Server

修改 /etc/zabbix/zabbix_server.conf 文件,大约在 129 行左右,取消注释并修改密码:DBPassword=zabbix

配置 Zabbix 页面

修改 /etc/nginx/conf.d/zabbix.conf 文件,注意取消注释:

listen 8080;

server_name

启动服务

复制代码
systemctl restart zabbix-server zabbix-agent nginx php-fpm 
systemctl enable zabbix-server zabbix-agent nginx php-fpm

(四)Zabbix 页面配置

  1. 登录 Zabbix :在浏览器中输入http://192.168.207.137:8080/
  2. 设置语言:进入欢迎页面后,设置所需语言。
  3. 检查环境:进行必要条件检查,确保环境符合要求。
  4. 配置数据库连接:按照提示正确配置数据库连接参数。
  5. 主机名设置:保持默认即可,默认时区为系统(UTC+0000UTC)。
  6. 安装前汇总:检查配置参数,确认无误后点击下一步。
  7. 完成安装:提示 Zabbix 前端配置好后,完成安装。
  8. 登录:默认账号为 Admin,默认密码为 zabbix。

(五)部署 Proxy

  1. 添加 Zabbix 源

    [root@proxy~]#rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
    [root@zabbix ~]#dnf clean all

安装软件包

复制代码
[root@proxy ~]#dnf-y install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql
[root@proxy~]#dnf-y install https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/net-snmp-libs-5.9.1-17.el9.x86_64.rpm

导入数据

复制代码
#Zabbix Server节点执行
[root@zabbix ~]##mysql -uroot -p
mysql> set global log_bin_trust_function_creators =1;
mysql> quit;
#Proxy节点执行,IP地址修改为Zabbix Server的IP
root@proxy /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy -h 192.168.207.137
#Zabbix Server节点执行
[root@zabbix ~]# mysql -uroot -p
mysql>set global log_bin_trust_function_creators= 0;
mysql> quit;

配置 Zabbix Proxy

修改 /etc/zabbix/zabbix_proxy.conf 文件:

大约 32 行左右,修改为 Zabbix Server 节点的 IP:Server=192.168.207.137

大约 42 行左右,可根据需要修改,后续 web 页面添加时名字要和这里保持一致:Hostname=Zabbix proxy

大约 157 行左右,取消注释修改为 Zabbix Server 节点的 IP:DBHost=192.168.207.137

大约 194 行左右,取消注释并设置数据库密码:DBPassword=zabbix

启动服务

复制代码
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
  1. Web 页面添加 Proxy:进入管理 -->Proxy > 创建 agent 代理,选择主动式(默认)。

(六)部署 Agent

添加 Zabbix 源

复制代码
[root@server01~]#rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-latest-6.4.el9.noarch.rpm
[root@server01~]#dnf clean all

安装软件包

复制代码
[root@server01 ~]#dnf-y install zabbix-agent

配置 Agent

修改 /etc/zabbix/zabbix_agentd.conf 文件:

大约 11 行,上报给 Server 或 Proxy 的 IP:Server=192.168.207.137

大约 171 行,通常与 Server 配置一致:ServerActive=192.168.207.137

大约 182 行,Agent 本地的名称,需与 Server 端 Web 页面上的主机名称一致:Hostname=server01

启动服务

复制代码
systemctl start zabbix-agent
systemctl enable zabbix-agent

添加主机

进入数据采集 -- 主机 -> 创建主机,配置主机名称(与 Agent 服务配置文件中的 Hostname 保持一致)、模板(可选择自带模板或自定义)、主机群组(选择已有或创建新群组)、接口(添加 Agent 节点,填写被监控节点的 IP)。若通过 proxy 上报,整体配置类似,只需选择之前创建的 proxy 即可。

(七)扩展:解决图像字体显示问题

查找 Zabbix 定义字体的 php 文件

复制代码
[root@zabbix ~]#find /-name defines.inc.php
/usr/share/zabbix/include/defines.inc.php

查看 Zabbix 字体文件中用的字体

复制代码
[root@zabbix~]#grep"ZBX_FONTPATH"/usr/share/zabbix/include/defines.inc.php
define('ZBX_FONTPATH', realpath('assets/fonts'));//where to search for font(GD>2.0.18)
[root@zabbix~]#grep "ZBX_GRAPH_FONT_NAME"/usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME','graphfont');//fontfile name

查找 Zabbix 的字体文件位置

复制代码
[root@zabbix ~]#find /-name graphfont.ttf
/usr/share/zabbix/assets/fonts/graphfont.ttf

替换字体

上传 msyh1.ttc 文件到 /usr/share/zabbix/assets/fonts 目录,然后执行以下命令

复制代码
[root@zabbix ~]#cd /usr/share/zabbix/assets/fonts
[root@zabbix fonts]#ls
graphfont.ttf msyh1.ttc
[root@zabbix fonts]# ln -snf msyh1.ttc graphfont.ttf

备注:-S 表示创建软连接,-f 表示强行删除任何已存在的目标文件,-n 表示把符号连接的目的目录视为一般文件。操作完成后刷新页面观察效果。

通过以上详细的部署步骤和理论知识学习,能够全面了解 Zabbix 企业级分布式监控系统的部署和应用,为 IT 运维工作中的监控环节提供有力支持,确保 IT 基础设施和业务系统的稳定运行。在实际操作过程中,需仔细按照步骤执行,注意各配置参数的正确性,以保障监控系统的正常搭建和使用。同时,深入理解监控系统的原理和 Zabbix 的功能特性,有助于更好地运用该系统进行有效的监控和管理。

相关推荐
lichenyang4531 小时前
Http和Https
网络·网络协议·http
胖大和尚2 小时前
使用 sshfs 工具将远程 Linux 主机的文件夹挂载到本地
linux·服务器·网络
chen_note2 小时前
Linux网络信息(含ssh服务和rsync)
linux·运维·服务器·网络·ssh·远程工作·rsync
安心落意3 小时前
Windows Server2022下使用SQL Server2019开发版搭建高可用集群
网络·windows·数据挖掘·数据库高可用·aways on
optimistic_chen5 小时前
【Java EE初阶 --- 网络原理】应用层---HTTP(HTTPS)协议
java·网络·http·https·java-ee
曾几何时`6 小时前
网络协议(四)网络层 路由协议
网络·网络协议
iナナ6 小时前
初识网络原理
网络
曾几何时`7 小时前
网络协议(三)网络层 IPv4、CIDR(使用子网掩码进行网络划分)、NAT在私网划分中的应用
网络·网络协议
刘哥测评技术zcwz6267 小时前
亚马逊自养号测评实战指南:从环境搭建到安全提排名
网络·安全·网络安全
90后小陈老师8 小时前
网络安全实验06 部署防火墙主备备份双机热备,提高网络可靠性
运维·网络·华为·ensp