
搞Zabbix监控这么些年CentOS 7.6 Zabbix 6这个组合我一直觉得是国内服务器环境里最稳的一套搭配。我遇到过不少朋友一上手就卡在装完页面打不开、数据库连不上、要么就是Agent数据不上报折腾一整天最后发现是防火墙或者SELinux没关干净。这篇文章我把自己实际的部署过程和踩坑记录整理出来环境就是一台干净的CentOS 7.6从零开始把Zabbix 6装起来包括数据库初始化、前端配置、加Agent主机这些完整流程适合正在选型监控方案或者第一次接触Zabbix的你直接参照着干。1. 为什么选 CentOS 7.6 配 Zabbix 61.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核心参数如下BOOTPROTOstatic ONBOOTyes IPADDR192.168.100.10 NETMASK255.255.255.0 GATEWAY192.168.100.1 DNS1223.5.5.5 DNS2114.114.114.114改完之后重启网络服务systemctl restart network提醒一下如果你确实在虚拟机里用DHCP务必保证没有其他设备占用你能分配的IP范围否则Agent端点一旦变化Zabbix Server会自动标记主机不可达数据就会断掉。2.2 关闭防火墙和SELinux这一步很基础但极其重要我甚至可以说90%的Zabbix部署失败都跟这两个东西有关。CentOS 7默认开启了firewalldSELinux也是 enforcing 模式。Zabbix Server需要监听10051端口前端需要80端口Agent需要10050端口还有数据库的3306端口全部放行当然也可以配置规则但自己测试环境直接关掉最省事。分别执行systemctl stop firewalld systemctl disable firewalld修改/etc/selinux/config把SELINUXenforcing改成SELINUXdisabled。然后重启系统让SELinux失效。如果你不想重启可以用setenforce 0临时关闭但下次开机还是会变回去所以配置文件里一定要改掉。如果你在生产环境不想关防火墙那至少需要放行这几个端口firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port10051/tcp firewall-cmd --permanent --add-port10050/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。先检查系统里有没有默认的MariaDBrpm -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对数据库密码复杂度有要求建议直接用带大小写、数字和特殊字符的强密码比如Zabbix2024这种级别的。3.4 创建Zabbix数据库并导入数据进入MySQL命令行创建Zabbix专用数据库和用户mysql -uroot -p在MySQL命令行里执行CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER zabbixlocalhost IDENTIFIED BY Zabbix2024; CREATE USER zabbix% IDENTIFIED BY Zabbix2024; GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost; 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 -pZabbix2024 zabbix这一步会加载几百张表大概需要几十秒到几分钟不等。导入完可以验证一下mysql -uzabbix -pZabbix2024 -e use zabbix; show tables; | wc -l正常情况下表数量应该在160张以上。如果这个数字偏少说明导入有问题后续启动服务时会报表缺失的错误。3.5 修改zabbix_server.conf配置编辑Zabbix Server的主配置文件vim /etc/zabbix/zabbix_server.conf需要重点改这几个参数DBHostlocalhost DBNamezabbix DBUserzabbix DBPasswordZabbix2024如果数据库和应用在同一台机器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和Apachesystemctl 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项都能在网上查到对应的解决方案。如果是自己测试环境边看提示边改重启即可不用过度追求全部PassBCmath和mbstring这种基础扩展必须装上。5. Agent安装与被监控主机接入5.1 安装Zabbix AgentZabbix监控客户端也叫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.confServer你的Zabbix Server IP ServerActive你的Zabbix Server IP Hostname被监控机器的主机名这里要特别解释一下两个Server参数的区别。Server是允许哪些IP主动来采集数据是入站方向的白名单ServerActive是Agent主动向哪个Server上报数据是出站方向。如果你只填了ServerActive没填Server那么在Web页面上使用被动检查的监控项时数据会一直显示不支持最后你发现网络是通的、Agent也在运行但就是不出数据原因就在这里。修改完成后启动Agentsystemctl restart zabbix-agent systemctl enable zabbix-agent5.2 Agent端防火墙注意事项Agent端默认监听10050端口同样需要保证防火墙放行。CentOS 7上执行firewall-cmd --permanent --add-port10050/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 agentIP地址填Agent服务器的IP端口默认10050。保存后等一两分钟界面会从灰色变成绿色可用性显示“已启用”说明主机已经接入成功。这里有个比较常见的坑如果你在Agent配置里把Hostname设置得和主机名不一致而且开启了主动注册会出现界面显示主机不可达但Agent进程和端口都正常的情况。排查方式是先关闭主动注册只用被动检查模式保证基础数据通了再说。6. 常见问题与排查技巧实录6.1 数据库连接失败的排查Zabbix Server启动失败日志里看到Access denied for user zabbixlocalhost。这个错误的原因几乎都是密码不对或者权限没刷新。先用命令行手动连接测试mysql -uzabbix -pZabbix2024 -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 httpdApache未启动或80端口被占用Server无法启动/var/log/zabbix/zabbix_server.log数据库配置错误Agent数据不支持telnet 被监控IP 10050防火墙拦截或Agent未启动图形无数据查看监控项最后检查时间时区或监控项参数问题模板不可用zabbix_get -s IP -k agent.pingAgent版本或模板不匹配告警不触发查看动作配置、告警媒介用户未关联媒介页面报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确实有点小。监控设备多的时候缓存写满会导致新监控项不生效直接把CacheSize128MHistoryCacheSize64M这两个调大后对整体性能提升帮助很明显。第四关于升级。Zabbix 6.0的升级路径和5.0并不完全一致如果你是从旧版本升级过来的一定要先备份数据库和配置文件升级后旧版模板可能已经废弃需要同时更新模板。如果是新装直接装最新小版本即可不用管历史遗留。