一、Zabbix 概述与架构原理
1.1 Zabbix 核心功能
Zabbix 是一款开源的企业级分布式监控解决方案,能够监控网络参数、服务器健康状态和性能指标。其核心功能包括:
- 实时监控网络设备、服务器和应用程序
- 灵活的告警机制,支持邮件、短信等多种告警方式
- 强大的数据可视化和报表功能
- 分布式架构,支持数千节点的大规模监控
1.2 架构组件
Zabbix 主要由以下组件构成:
- Zabbix Server:核心服务器,负责数据收集和处理
- Zabbix Agent:安装在被监控设备上,收集本地数据
- Zabbix Web UI:Web 界面,用于配置和查看监控数据
- Zabbix Proxy:分布式监控时使用,减轻 Server 负担
- 数据库:存储监控数据,支持 MySQL、PostgreSQL 等
1.3 部署架构规划
本次部署采用单服务器架构,适用于中小型企业监控需求:
- 服务器配置:2 核 CPU、4GB 内存、100GB 磁盘
- 操作系统:CentOS 7.9
- 数据库:MySQL 5.7
- Zabbix 版本:4.0.24
- 部署模式:Zabbix Server+Agent+Web UI 集中部署
二、环境准备与依赖安装
2.1 系统基础配置
- 关闭防火墙和 SELinux:
bash
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
reboot
- 配置 YUM 源优化:
bash
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/CentOS-vault.repo
yum makecache
2.2 安装基础依赖
bash
yum install -y wget net-tools vim unzip
2.3 安装 MySQL 数据库
- 添加 MySQL 官方仓库:
bash
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7-7.noarch.rpm
- 安装 MySQL 服务:
bash
yum -y install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
- 配置 MySQL 安全设置:
bash
# 获取初始密码
grep 'temporary password' /var/log/mysqld.log
# 登录并修改密码
mysql -uroot -p
在 MySQL 控制台执行:
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Zabbix@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Zabbix@123';
FLUSH PRIVILEGES;
2.4 创建 Zabbix 数据库
bash
mysql -uroot -pZabbix@123 -e "CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;"
mysql -uroot -pZabbix@123 -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Zabbix@123';"
mysql -uroot -pZabbix@123 -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';";
mysql -uroot -pZabbix@123 -e "FLUSH PRIVILEGES;";
三、Zabbix 服务器部署
3.1 添加 Zabbix 仓库
bash
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
yum clean all
3.2 安装 Zabbix 组件
bash
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent
3.3 配置 Zabbix Server
- 导入 Zabbix 数据库架构:
bash
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pZabbix@123 zabbix
- 修改 Zabbix Server 配置文件:
bash
vim /etc/zabbix/zabbix_server.conf
主要配置项:
plaintext
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix@123
DBPort=3306
3.4 配置 Web 界面
bash
vim /etc/httpd/conf.d/zabbix.conf
修改时区为上海:
plaintext
php_value date.timezone Asia/Shanghai
3.5 启动服务
bash
systemctl start zabbix-server zabbix-agent httpd
systemctl enable zabbix-server zabbix-agent httpd
四、Zabbix Web 界面配置
4.1 首次访问配置
- 浏览器访问
http://服务器IP/zabbix
,进入安装向导 - 检查前置条件,确保 PHP 版本≥5.4,内存限制≥128M,禁用了 Safe Mode,开启了 zlib、bcmath、mbstring 扩展
- 配置数据库连接:
- 主机名:localhost
- 数据库:zabbix
- 用户名:zabbix
- 密码:Zabbix@123
- 配置 Zabbix 服务器参数:
- 服务器地址:localhost
- 端口:10051
- 完成配置后,使用默认账号密码登录:Admin/zabbix
五、Zabbix 基础监控配置
5.1 添加监控主机
- 登录 Zabbix Web 界面,进入 "配置"→"主机"→"创建主机"
- 填写主机信息:
- 主机名称:Linux 服务器
- 可见名称:Linux 服务器
- 组:选择 "Linux servers"
- 配置连接方式:
- 主机接口:IP 地址填写服务器 IP
- 协议:Zabbix Agent
- 端口:10050
5.2 安装 Zabbix Agent
- 在被监控服务器安装 Agent:
bash
yum install -y zabbix-agent
- 修改配置文件:
bash
vim /etc/zabbix/zabbix_agentd.conf
主要配置:
plaintext
Server=Zabbix服务器IP
ServerActive=Zabbix服务器IP
Hostname=Linux服务器
- 启动 Agent:
bash
systemctl start zabbix-agent
systemctl enable zabbix-agent
5.3 添加监控项
- 进入 "配置"→"主机"→选择主机→"创建监控项"
- 配置监控项参数:
- 键值:system.cpu.load [all,avg1]
- 名称:CPU 负载
- 类型:Zabbix Agent
- 数据类型:浮点数
- 单位:%
- 更新间隔:30 秒
5.4 创建仪表盘
- 进入 "监控中"→"仪表盘"→"创建仪表盘"
- 添加图表元素:
- 选择 "CPU 负载" 监控项
- 图表类型:折线图
- 时间范围:24 小时
六、告警配置与实战
6.1 创建告警规则
- 进入 "配置"→"主机"→选择主机→"创建触发器"
- 配置触发器参数:
- 名称:CPU 负载过高
- 表达式:{Linux 服务器:system.cpu.load [all,avg1].last ()} > 80
- 严重级别:警告
6.2 配置告警媒介
- 进入 "管理"→"用户"→选择 Admin 用户→"告警媒介"
- 配置邮件告警:
- 类型:Email
- 收件人:admin@example.com
- 显示名称:管理员
6.3 配置告警动作
- 进入 "配置"→"动作"→"创建动作"
- 配置触发条件:
- 条件:触发器名称包含 "CPU 负载过高"
- 配置执行操作:
- 发送通知到 Admin 用户
- 消息内容:"服务器 {HOSTNAME} CPU 负载达到 {TRIGGER.VALUE}%,请及时处理"
七、Zabbix 进阶功能
7.1 监控网络设备
- 添加 SNMP 接口:
- 主机接口:IP 地址
- 协议:SNMP
- 端口:161
- 配置 SNMP 参数:
- 社区字符串:public
- 添加 SNMP 监控项:
- 键值:snmpwalk [1.3.6.1.2.1.1.1.0]
- 名称:设备描述
7.2 监控 MySQL 数据库
- 创建自定义监控项:
- 键值:mysql.status [Threads_connected]
- 名称:MySQL 连接数
- 配置触发器:
- 表达式:{Linux 服务器:mysql.status [Threads_connected].last ()} > 200
- 严重级别:严重
7.3 分布式监控部署
- 在远程服务器安装 Zabbix Proxy:
bash
yum install -y zabbix-proxy-mysql
- 配置 Proxy:
bash
vim /etc/zabbix/zabbix_proxy.conf
主要配置:
plaintext
Server=Zabbix服务器IP
Hostname=Proxy服务器
DBHost=Zabbix数据库IP
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=Zabbix@123
- 创建 Proxy 数据库:
bash
mysql -uroot -pZabbix@123 -e "CREATE DATABASE zabbix_proxy CHARACTER SET utf8 COLLATE utf8_bin;"
zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uzabbix -pZabbix@123 zabbix_proxy
- 启动 Proxy:
bash
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
八、性能优化与故障排除
8.1 性能优化
- 调整 Zabbix Server 参数:
bash
vim /etc/zabbix/zabbix_server.conf
优化参数:
plaintext
StartPollers=50
StartPollersUnreachable=5
StartTrappers=100
MaxHousekeeper=5
Timeout=4
- 优化 MySQL 数据库:
bash
vim /etc/my.cnf
添加参数:
plaintext
max_connections=500
innodb_buffer_pool_size=256M
key_buffer_size=64M
- 重启 MySQL:
bash
systemctl restart mysqld
8.2 常见故障排除
-
Zabbix Server 无法连接数据库:
- 检查数据库服务是否运行
- 确认 zabbix_server.conf 中的数据库配置正确
- 检查防火墙是否允许数据库端口访问
-
客户端无法连接到 Zabbix Agent:
- 检查 zabbix_agentd.conf 中的 Server 和 ServerActive 配置
- 确认 Agent 服务已启动
- 检查防火墙是否允许 10050 端口访问
-
网页访问 Zabbix 提示 "Cannot connect to Zabbix server":
- 检查 zabbix_server 是否运行
- 确认 zabbix_server.conf 中的 DB 配置正确
- 检查 zabbix 前端配置中的 ServerIP 是否正确
九、生产环境最佳实践
9.1 高可用性部署
- 部署 MySQL 主从复制:
- 主服务器配置:
bash
vim /etc/my.cnf
添加:
plaintext
server-id=1
log-bin=mysql-bin
- 从服务器配置:
bash
vim /etc/my.cnf
添加:
plaintext
server-id=2
log-bin=mysql-bin
replicate-all-databases
- 配置 Zabbix Server 集群:
- 使用 ZooKeeper 实现负载均衡
- 每个 Zabbix Server 连接到相同的 MySQL 集群
- 通过 Nginx 进行前端负载均衡
9.2 安全加固
- 更改 Zabbix 默认端口:
bash
vim /etc/zabbix/zabbix_server.conf
Port=10051
bash
vim /etc/zabbix/zabbix_agentd.conf
Port=10050
- 配置 IP 访问限制:
bash
vim /etc/httpd/conf.d/zabbix.conf
添加:
plaintext
<Location /zabbix>
Require ip 192.168.1.0/24
</Location>
- 启用 TLS 加密:
- 生成证书:
bash
openssl genrsa -out zabbix_server.key 2048
openssl req -new -key zabbix_server.key -out zabbix_server.csr
openssl x509 -req -days 365 -in zabbix_server.csr -signkey zabbix_server.key -out zabbix_server.crt
- 配置 Zabbix Server:
bash
vim /etc/zabbix/zabbix_server.conf
添加:
plaintext
SSLCertFile=/path/to/zabbix_server.crt
SSLCertKeyFile=/path/to/zabbix_server.key
StartTLS=1
9.3 自动化部署
- 使用 Ansible 脚本批量部署 Zabbix Agent:
yaml
- name: Install Zabbix Agent
hosts: all
tasks:
- name: Add Zabbix repository
yum_repository:
name: zabbix
baseurl: https://repo.zabbix.com/zabbix/4.0/rhel/7/$basearch
gpgkey: https://repo.zabbix.com/RPM-GPG-KEY-zabbix
enabled: true
- name: Install zabbix-agent
yum:
name: zabbix-agent
state: present
- name: Configure zabbix_agentd.conf
template:
src: zabbix_agentd.conf.j2
dest: /etc/zabbix/zabbix_agentd.conf
variables:
zabbix_server: 192.168.1.100
hostname: {{ ansible_hostname }}
- name: Start zabbix-agent
service:
name: zabbix-agent
state: started
enabled: true
十、总结
Zabbix 作为企业级监控解决方案,能够满足从简单到复杂的各种监控需求。通过本指南,您已掌握了 Zabbix 的完整部署流程,包括环境准备、软件安装、配置管理、告警设置和性能优化。在实际应用中,建议根据业务规模和复杂度进一步扩展监控能力,如添加更多监控模板、集成第三方系统或部署分布式架构。定期备份 Zabbix 配置和数据库,确保在故障时能快速恢复。随着技术的发展,Zabbix 也在不断更新,建议关注官方文档获取最新功能和最佳实践。通过持续学习和实践,您将成为 Zabbix 监控专家,为企业 IT 系统的稳定运行提供坚实保障。