1. 项目概述
Zabbix作为企业级开源监控解决方案的最新版本7.0,带来了多项性能优化和新特性支持。本次在CentOS Stream 9系统上的完整部署实践,将涵盖从基础环境准备到生产级安全配置的全流程。不同于简单安装指南,本方案特别强化了企业环境中常被忽视的SELinux策略定制和网络安全组配置环节,确保监控系统既功能完备又符合安全合规要求。
2. 环境准备与架构设计
2.1 硬件资源规划
对于中型规模监控场景(约500个监控项),建议配置:
- 服务器:4核CPU/8GB内存/100GB存储(SSD)
- 数据库:独立部署时需8核CPU/16GB内存/200GB存储
注意:Zabbix Server与数据库同机部署时,内存需按两者需求叠加计算。实测中MySQL 8.0在监控1000个监控项时,常驻内存消耗约4GB。
2.2 操作系统优化
CentOS Stream 9需预先完成以下配置:
bash复制# 关闭防火墙(后续会用安全组替代)
systemctl stop firewalld
systemctl disable firewalld
# 设置时区同步
timedatectl set-timezone Asia/Shanghai
ntpdate -u ntp.aliyun.com
# 内核参数调整(高并发场景)
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "net.core.somaxconn = 2048" >> /etc/sysctl.conf
sysctl -p
2.3 架构拓扑设计
典型的三层监控架构包含:
- 数据采集层:Zabbix Agent/SNMP Trapper
- 数据处理层:Zabbix Server + Proxy
- 数据存储层:MySQL/PostgreSQL + Elasticsearch(历史数据)
![架构图描述:前端通过Nginx反向代理访问Zabbix Web,Server连接独立数据库集群,多区域通过Proxy实现分布式监控]
3. 组件安装与配置
3.1 数据库部署
MySQL 8.0配置优化要点:
ini复制[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
character_set_server = utf8mb4
collation_server = utf8mb4_bin
创建专属数据库用户:
sql复制CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'ComplexP@ssw0rd';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
3.2 Zabbix服务安装
官方源配置:
bash复制rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-1.el9.noarch.rpm
dnf clean all
核心组件安装:
bash复制dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
3.3 数据库初始化
导入初始schema:
bash复制zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
关键点:7.0版本新增的housekeeper表结构变化,若从旧版迁移需特别注意数据兼容性
4. 安全加固实战
4.1 安全组策略配置
企业级网络访问控制建议:
- 入方向:
- TCP 10051(Server端)
- TCP 80/443(Web端)
- ICMP(可选)
- 出方向:
- TCP 3306(数据库)
- TCP 9200(ES集群)
4.2 SELinux策略定制
解决常见权限问题:
bash复制# Web目录上下文设置
semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/zabbix(/.*)?"
restorecon -Rv /usr/share/zabbix
# 自定义Zabbix策略模块
cat > zabbix.te <<EOF
module zabbix 1.0;
require {
type httpd_t;
type zabbix_var_run_t;
class dir { search read };
}
allow httpd_t zabbix_var_run_t:dir { search read };
EOF
checkmodule -M -m -o zabbix.mod zabbix.te
semodule_package -o zabbix.pp -m zabbix.mod
semodule -i zabbix.pp
4.3 Web安全配置
Nginx强化配置示例:
nginx复制server {
listen 80;
server_name zabbix.example.com;
# 禁用敏感信息
server_tokens off;
# 安全头部
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
# 限制敏感路径访问
location ~ ^/(conf|include) {
deny all;
}
}
5. 服务调优与监控
5.1 性能参数优化
zabbix_server.conf关键配置:
conf复制StartPollers=20
StartPollersUnreachable=5
StartTrappers=10
StartPingers=5
CacheSize=256M
HistoryCacheSize=128M
TrendCacheSize=64M
5.2 自监控实现
通过Zabbix Agent监控自身状态:
conf复制UserParameter=zabbix.queue[*],echo "select count(*) from alerts where status=0" | mysql -N zabbix | awk '{print $1}'
UserParameter=zabbix.process,ps -ef | grep zabbix_server | grep -v grep | wc -l
5.3 告警模板配置
企业微信集成示例:
javascript复制function sendToWeCom(message, subject) {
var url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY";
var data = {
"msgtype": "text",
"text": {
"content": subject + "\n" + message,
"mentioned_mobile_list":["@all"]
}
};
var response = http.post(url, JSON.stringify(data));
return response.statusCode == 200;
}
6. 故障排查手册
6.1 常见错误解决
- SELinux阻止数据库连接:
bash复制audit2allow -a -M zabbix_mysql
semodule -i zabbix_mysql.pp
- 前端显示"Database error":
- 检查/usr/share/zabbix/conf/zabbix.conf.php权限
- 验证DB用户是否有zabbix库的完整权限
- 监控数据延迟:
bash复制zabbix_server -R config_cache_reload # 重载配置
mysqladmin -uroot -p processlist # 检查数据库负载
6.2 日志分析技巧
关键日志路径:
- /var/log/zabbix/zabbix_server.log
- /var/log/nginx/error.log
- /var/log/mysql/mysql.log
高效日志过滤命令:
bash复制# 实时显示错误日志
tail -f /var/log/zabbix/zabbix_server.log | grep -E 'ERR|WARN'
# 统计高频错误
grep -oP '\[.*?\]' /var/log/zabbix/zabbix_server.log | sort | uniq -c | sort -nr
7. 升级与维护策略
7.1 版本升级路径
7.0版本升级注意事项:
- 先备份数据库和配置文件
- 停止所有Zabbix服务
- 按顺序升级:
- 数据库schema
- Server组件
- Web前端
- Agent
7.2 数据备份方案
自动化备份脚本示例:
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
mysqldump -uzabbix -p zabbix | gzip > /backup/zabbix_db_$DATE.sql.gz
tar czvf /backup/zabbix_conf_$DATE.tar.gz /etc/zabbix/*
find /backup -type f -mtime +30 -delete
7.3 日常维护建议
-
每周检查:
- 数据库表空间使用率
- Housekeeper执行情况
- 队列积压监控
-
每月维护:
- 索引碎片整理
- 配置文件审计
- 安全策略复查
-
每季度:
- 压力测试
- 灾备演练
- 权限复核
8. 扩展功能实现
8.1 分布式监控部署
Zabbix Proxy配置要点:
conf复制Server=主服务器IP
Hostname=代理节点名称
DBName=zabbix_proxy
DBUser=proxy_user
DBPassword=Proxy@123
8.2 自动化注册配置
自动发现规则示例:
xml复制<zabbix_export>
<discovery_rules>
<discovery_rule>
<name>Auto registration</name>
<type>0</type>
<key>system.uname</key>
<delay>1h</delay>
<status>0</status>
<filter>
<evaltype>0</evaltype>
<conditions>
<condition>
<macro>{#HOSTNAME}</macro>
<value>prod-.*</value>
<operator>8</operator>
</condition>
</conditions>
</filter>
</discovery_rule>
</discovery_rules>
</zabbix_export>
8.3 自定义监控项开发
Python脚本监控示例:
python复制#!/usr/bin/env python3
import psutil
def check_disk():
usage = psutil.disk_usage('/').percent
print(f"disk.usage {usage}")
if __name__ == '__main__':
check_disk()
对应Zabbix Agent配置:
conf复制UserParameter=custom.disk.usage,python3 /etc/zabbix/scripts/disk_check.py | awk '{print $2}'