搞Zabbix监控这么些年,CentOS 7.6 + Zabbix 6这个组合我一直觉得是国内服务器环境里最稳的一套搭配。我遇到过不少朋友一上手就卡在装完页面打不开、数据库连不上、要么就是Agent数据不上报,折腾一整天最后发现是防火墙或者SELinux没关干净。这篇文章我把自己实际的部署过程和踩坑记录整理出来,环境就是一台干净的CentOS 7.6,从零开始把Zabbix 6装起来,包括数据库初始化、前端配置、加Agent主机这些完整流程,适合正在选型监控方案或者第一次接触Zabbix的你直接参照着干。
1. 为什么选 CentOS 7.6 配 Zabbix 6
1.1 版本组合的取舍思路
选择CentOS 7.6并不是因为它是最新版本,而是因为它在企业服务器里的存量太大。很多公司的生产环境至今还是CentOS 7系列,PHP版本停留在5.4或者7.2,数据库用MySQL 5.7甚至MariaDB,这套技术栈和Zabbix 6的兼容性非常好。Zabbix 6.0是LTS长期支持版本,官方会持续提供安全更新,对于不想频繁升级、求稳的运维场景,这是最关键的理由。
我刚开始也想过直接用CentOS 8或者Rocky Linux,但后来发现不少第三方监控插件、短信告警脚本、自定义采集脚本还在依赖CentOS 7的Python 2.7环境,强行换系统的改造成本比想象中大。Zabbix 6在CentOS 7.6上跑得非常好,官方仓库直接提供编译好的rpm包,依赖库基本都在系统源里,不需要手动编一堆东西,这也是我推荐这个组合的原因之一。
1.2 Zabbix 6 相对旧版的核心变化
如果你之前用过Zabbix 4或者5,切到6之后最直观的感受是现代前端界面和更细粒度的权限控制。Zabbix 6默认启用了新的前端UI,菜单结构变动比较大,主机、模板、告警这几个入口都重新整理了。功能上比较重要的是支持了原生多因子认证、改进的业务服务树,以及对Prometheus数据源更好的兼容,这意味着你慢慢可以把其他监控体系收敛到Zabbix里。
不过需要注意,Zabbix 6对PHP版本的要求更高了,前端要求PHP 7.2以上,这就意味着如果你直接用CentOS 7.6自带的PHP 5.4,必须额外安装软件集(Software Collections)里的高版本PHP,或者用Zabbix官方源来自动解决依赖。我后面安装时会讲到,如果你完全按照官方文档用yum install zabbix-server-mysql zabbix-web-mysql这种方式安装,依赖会自动处理,基本不用操心PHP版本的问题。
1.3 单机部署还是分体部署
Zabbix的架构可以拆得很细,Server、数据库、前端、Agent都可以放在不同的机器上。但绝大多数中小团队根本不需要一开始就上分布式。这台机器配置在4核8G左右的话,直接把Server、MySQL、前端都装在一起就够了,能监控几百台设备都没什么压力。
我个人的建议是,除非你有明确的性能瓶颈或者异地监控的需求,否则第一次搭建就用单机一体部署。等以后监控的机器数量上来,再考虑把数据库拆出去,或者增加Zabbix Proxy做分级采集。单机部署的好处是排障链路短,出了问题不用跨机器查日志。这篇文章接下来的所有步骤就是基于单机一体部署往下走的。
2. 环境初始化与依赖安装
2.1 虚拟机网络配置与静态IP
在正式装Zabbix之前,先要把系统基础环境搞定。很多教程一上来就让你装软件,结果后面发现yum源连不上、时间不同步,这些都是小坑。我建议先配置好静态IP。之前有朋友用DHCP获取IP,结果虚拟机重启后IP变了,Web界面和Agent连接全部断掉,排查了很久才发现是地址变了,非常影响效率。
在CentOS 7.6里配置静态IP,修改对应网卡配置文件即可,比如/etc/sysconfig/network-scripts/ifcfg-ens33,核心参数如下:
BOOTPROTO=static ONBOOT=yes IPADDR=192.168.100.10 NETMASK=255.255.255.0 GATEWAY=192.168.100.1 DNS1=223.5.5.5 DNS2=114.114.114.114改完之后重启网络服务:
systemctl restart network提醒一下:如果你确实在虚拟机里用DHCP,务必保证没有其他设备占用你能分配的IP范围,否则Agent端点一旦变化,Zabbix Server会自动标记主机不可达,数据就会断掉。
2.2 关闭防火墙和SELinux
这一步很基础但极其重要,我甚至可以说90%的Zabbix部署失败都跟这两个东西有关。CentOS 7默认开启了firewalld,SELinux也是 enforcing 模式。Zabbix Server需要监听10051端口,前端需要80端口,Agent需要10050端口,还有数据库的3306端口,全部放行当然也可以配置规则,但自己测试环境直接关掉最省事。
分别执行:
systemctl stop firewalld systemctl disable firewalld修改/etc/selinux/config,把SELINUX=enforcing改成SELINUX=disabled。然后重启系统让SELinux失效。如果你不想重启,可以用setenforce 0临时关闭,但下次开机还是会变回去,所以配置文件里一定要改掉。
如果你在生产环境不想关防火墙,那至少需要放行这几个端口:
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=10051/tcp firewall-cmd --permanent --add-port=10050/tcp firewall-cmd --reload2.3 配置yum源和基础工具
CentOS 7.6自带的基础源速度可能不理想,建议先替换为阿里云或者清华的镜像源。我用的是阿里云的源,配置很简单:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache然后装一些基础工具:
yum install -y vim wget net-tools lsof telnet这里有个小建议:net-tools提供ifconfig、netstat这些命令,排查端口监听和连接状态时非常有用,新装的系统默认没有,装一个不亏。telnet用来测试Agent端口是否通,比nc直观。
3. Zabbix 6 Server 安装与数据库配置
3.1 安装Zabbix官方源
Zabbix官方提供了针对CentOS 7的rpm源,装完系统源之后,需要先装Zabbix自己的仓库。官方仓库地址会随版本变化,Zabbix 6.0对应的安装命令是:
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum clean all注意:repo.zabbix.com 的访问速度有时候比较一般,尤其国内服务器。如果你的机器下载很慢,可以手动把
/etc/yum.repos.d/zabbix.repo里的地址换成阿里云的镜像源,把repo.zabbix.com改成mirrors.aliyun.com/zabbix,实测速度能快好几倍。
3.2 安装Server、前端和Agent组件
安装过程直接用yum一步到位:
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent这个命令会同时安装数据库驱动、PHP相关组件、httpd服务等一堆依赖。Zabbix 6的Web前端的默认目录是/usr/share/zabbix,由Apache托管。如果你在安装过程中看到PHP版本相关的错误,多半是系统自带的PHP 5.4冲突,但用官方源安装一般会自动处理,把高版本PHP通过软件集方式带进来。
装完之后,查一下版本确认安装没问题:
zabbix_server -V3.3 初始化MySQL数据库
Zabbix 6需要MySQL 5.7或者MariaDB 10.2以上的版本。CentOS 7.6默认仓库里带的是MariaDB 5.5,版本偏低,我一般直接装MySQL 5.7。先检查系统里有没有默认的MariaDB:
rpm -qa | grep mariadb如果有,先卸载掉:
yum remove -y mariadb-libs然后安装MySQL 5.7官方源:
rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm yum install -y mysql-community-server启动数据库并设置开机自启:
systemctl start mysqld systemctl enable mysqldMySQL 5.7安装后会在日志里生成一个临时root密码。如果你没改过数据库密码,可以从日志里找:
grep 'temporary password' /var/log/mysqld.log拿到临时密码后,用下面的安全配置流程修改密码:
mysql_secure_installationZabbix对数据库密码复杂度有要求,建议直接用带大小写、数字和特殊字符的强密码,比如Zabbix@2024这种级别的。
3.4 创建Zabbix数据库并导入数据
进入MySQL命令行,创建Zabbix专用数据库和用户:
mysql -uroot -p在MySQL命令行里执行:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Zabbix@2024'; CREATE USER 'zabbix'@'%' IDENTIFIED BY 'Zabbix@2024'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%'; FLUSH PRIVILEGES; EXIT;然后导入初始数据。Zabbix 6的初始数据文件在文档中路径一般是/usr/share/doc/zabbix-server-mysql-6.0.*/create.sql.gz,执行导入命令:
zcat /usr/share/doc/zabbix-server-mysql-6.0.*/create.sql.gz | mysql -uzabbix -p'Zabbix@2024' zabbix这一步会加载几百张表,大概需要几十秒到几分钟不等。导入完可以验证一下:
mysql -uzabbix -p'Zabbix@2024' -e "use zabbix; show tables;" | wc -l正常情况下表数量应该在160张以上。如果这个数字偏少,说明导入有问题,后续启动服务时会报表缺失的错误。
3.5 修改zabbix_server.conf配置
编辑Zabbix Server的主配置文件:
vim /etc/zabbix/zabbix_server.conf需要重点改这几个参数:
DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=Zabbix@2024如果数据库和应用在同一台机器,DBHost保持localhost就行,不需要开启TCP连接。DBPassword就是前面创建用户时设置的那个密码。改完之后启动服务:
systemctl restart zabbix-server systemctl enable zabbix-server查看服务状态和日志确保没有异常:
systemctl status zabbix-server tail -f /var/log/zabbix/zabbix_server.log日志里如果出现cannot start alert manager service这种提示,先不用慌,看后面的报错关键字,大部分都和数据库连接有关。比如pgsql开头说明你数据库类型配错了,Access denied说明密码不对,Unknown database说明库名错误。
4. 前端Web界面配置
4.1 修改PHP时区设置
Zabbix前端依赖PHP,初始化之前必须把时区配置好,否则页面会直接报时区警告。修改PHP配置文件:
vim /etc/php-fpm.d/zabbix.conf或者有些版本是/etc/php.ini,看具体环境。找到php_value[date.timezone]这一行,改成:
php_value[date.timezone] = Asia/Shanghai改完之后重启PHP-FPM和Apache:
systemctl restart php-fpm systemctl restart httpd4.2 浏览器访问向导
服务器IP如果没改,默认访问:
http://你的服务器IP/zabbix首次访问会进入初始化向导,第一步是语言选择,这里可以直接选中文,不过建议后面对照英文界面看,有些翻译比较僵硬。接着是检查PHP配置项。如果有的选项显示Fail,多半是缺PHP模块或者参数值不达标,按提示安装或调整即可。
进入数据库配置页面时,填写之前设置的数据库信息。注意这里填写的是Zabbix用户和密码,不是root的。数据库主机填localhost,端口默认3306。配置完Zabbix Server信息后,向导会要求你填Server名称,这个名称会显示在页面标题和告警邮件里,取个容易辨识的名字,比如“生产环境监控中心”。
最后一步写入配置文件,一切顺利会看到登录页面,默认账号是Admin,密码是zabbix。登录后第一件事是修改默认密码,这个非常重要,之前有团队用默认密码跑在公网服务器上,被扫描器直接拖库改告警,教训深刻。
4.3 常见的前端PHP配置问题
安装过程中最容易遇到的几个问题,我直接列出来:
php_ldap模块缺失,页面提示安装php-ldap,执行yum install -y php-ldap后重启php-fpm。PHP option "max_execution_time"不达标,修改PHP配置调整到300以上。PHP option "post_max_size"不达标,改到16M以上。PHP option "always_populate_raw_post_data"如果PHP版本比较老,需要手动设置。
大部分Fail项都能在网上查到对应的解决方案。如果是自己测试环境,边看提示边改重启即可,不用过度追求全部Pass,BCmath和mbstring这种基础扩展必须装上。
5. Agent安装与被监控主机接入
5.1 安装Zabbix Agent
Zabbix监控客户端也叫Agent。在一台新的被监控服务器上安装Agent流程也很统一。先装官方源,和Server端一样:
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum install -y zabbix-agent然后修改配置文件/etc/zabbix/zabbix_agentd.conf:
Server=你的Zabbix Server IP ServerActive=你的Zabbix Server IP Hostname=被监控机器的主机名这里要特别解释一下两个Server参数的区别。Server是允许哪些IP主动来采集数据,是入站方向的白名单;ServerActive是Agent主动向哪个Server上报数据,是出站方向。如果你只填了ServerActive没填Server,那么在Web页面上使用被动检查的监控项时数据会一直显示不支持,最后你发现网络是通的、Agent也在运行,但就是不出数据,原因就在这里。
修改完成后启动Agent:
systemctl restart zabbix-agent systemctl enable zabbix-agent5.2 Agent端防火墙注意事项
Agent端默认监听10050端口,同样需要保证防火墙放行。CentOS 7上执行:
firewall-cmd --permanent --add-port=10050/tcp firewall-cmd --reload如果你在别的云环境,还要在安全组里放行这个端口。用 telnet 测试一下:
telnet ZabbixServerIP 10050如果能通,说明端口没问题。接下来测试Zabbix Server到Agent的连通性,在Server上执行:
zabbix_get -s 被监控IP -k agent.ping返回1就说明Agent正常工作。
5.3 Web前端添加主机
登录Zabbix Web界面,依次点击“数据采集 → 主机 → 创建主机”。主机名称填好,模板选择Linux by Zabbix agent,IP地址填Agent服务器的IP,端口默认10050。保存后等一两分钟,界面会从灰色变成绿色,可用性显示“已启用”,说明主机已经接入成功。
这里有个比较常见的坑:如果你在Agent配置里把Hostname设置得和主机名不一致,而且开启了主动注册,会出现界面显示主机不可达,但Agent进程和端口都正常的情况。排查方式是先关闭主动注册,只用被动检查模式,保证基础数据通了再说。
6. 常见问题与排查技巧实录
6.1 数据库连接失败的排查
Zabbix Server启动失败,日志里看到Access denied for user 'zabbix'@'localhost'。这个错误的原因几乎都是密码不对或者权限没刷新。先用命令行手动连接测试:
mysql -uzabbix -p'Zabbix@2024' -h localhost zabbix如果这里能连进去,再检查zabbix_server.conf里DBPassword前后有没有多余空格。如果这里连不进去,回到MySQL root用户,重新执行上面创建用户和赋权的那几条SQL。注意MySQL 5.7默认的密码策略比较严格,如果你设置的密码太弱,创建用户那一句就会直接报错,这时候要么提高密码强度,要么临时降低validate_password_policy。
6.2 主机显示绿色但Graph无数据
主机在Web界面上是绿色,可用性正常,但图形就是没有数据。这个情况我遇到很多次,经常是时区问题导致的。Zabbix系统本来就以UTC时间运行,如果PHP时区没设置好,图形监控页上数据点会出现几个小时的延迟或者偏移,看起来就像没有数据。
排查方法是在最新数据页面查看监控项,如果“最后检查时间”和“最后变化时间”都在更新,但图形没有点,多半是时间范围选择问题,切换时区或者调整图形时间范围就能看到。还有一种可能是监控项采集间隔太长,默认的30s有时候在测试环境看不出来,你改成1s并等几分钟再刷新图形看。
6.3 中文乱码问题
Zabbix界面如果显示中文乱码,通常是图形里没有中文字体。这种情况发生在图形名称或者主机名称用了中文时。解决方法是下载一个中文字体,比如思源黑体或者文泉驿微米黑,放入/usr/share/zabbix/assets/fonts,然后在/usr/share/zabbix/include/defines.inc.php里把ZBX_FONTPATH和ZBX_GRAPH_FONT_NAME指向这个字体文件。
改完刷新页面,中文就能正常显示了。如果还是乱码,清一下浏览器缓存,大概率能解决。
6.4 故障速查表
我把平时排障常用的命令和思路整理成了一张表,遇到问题先对号入座看看:
| 现象 | 排查命令/位置 | 大概率原因 |
|---|---|---|
| Web无法访问 | systemctl status httpd | Apache未启动或80端口被占用 |
| Server无法启动 | /var/log/zabbix/zabbix_server.log | 数据库配置错误 |
| Agent数据不支持 | telnet 被监控IP 10050 | 防火墙拦截或Agent未启动 |
| 图形无数据 | 查看监控项最后检查时间 | 时区或监控项参数问题 |
| 模板不可用 | zabbix_get -s IP -k agent.ping | Agent版本或模板不匹配 |
| 告警不触发 | 查看动作配置、告警媒介 | 用户未关联媒介 |
| 页面报500 | 查看Apache错误日志 | PHP模块冲突或权限问题 |
6.5 几个容易忽略的小细节
最后说几个不起眼但容易坑人的地方。
第一,时间同步一定要做。Zabbix的数据采集对时间非常敏感,Server和Agent时间不一致会出现丢数据、告警误报。CentOS 7.6上执行:
yum install -y ntpdate ntpdate -u ntp.aliyun.com echo "*/10 * * * * /usr/sbin/ntpdate -u ntp.aliyun.com" >> /var/spool/cron/root第二,安装完Zabbix后如果发现Web页面能打开但样式全丢,多半是PHP-FPM和Apache的socket通信有问题,重启一遍两个服务就好。
第三,zabbix_server.conf里的CacheSize,在内存充足的机器上可以适当调大,默认8M确实有点小。监控设备多的时候,缓存写满会导致新监控项不生效,直接把CacheSize=128M,HistoryCacheSize=64M,这两个调大后对整体性能提升帮助很明显。
第四,关于升级。Zabbix 6.0的升级路径和5.0并不完全一致,如果你是从旧版本升级过来的,一定要先备份数据库和配置文件,升级后旧版模板可能已经废弃,需要同时更新模板。如果是新装,直接装最新小版本即可,不用管历史遗留。