
在运维和网络工程这个行当里踩过的坑多了之后你会发现一件很有意思的事很多刚入职的同事或者正在学监控系统的同学卡住他们的往往不是Zabbix本身多难用而是从零到一部署这套东西的过程中各种细节没对上。比如数据库密码忘了改配置文件、防火墙没放行端口、PHP时区没调导致报错、Web界面全英文看着费劲。这些坑我基本都踩过一遍所以这篇文章直接把我现在用的完整部署流程写出来照着做基本不会出问题。我这次选的是CentOS 7 Zabbix 5.0 LTS的组合原因也很简单这套组合在服务器运维领域存量特别大教程针对性强而且网上大部分生产环境案例都基于这个版本。不管你是网络工程专业的学生、刚转行做运维的新人还是需要在实验室搭一套监控系统的工程师这篇都适合你。1. 安装前的整体规划与准备1.1 为什么选择CentOS 7与Zabbix 5.0 LTS组合先说个很多人没意识到的问题Zabbix的版本和操作系统版本是绑定的不是你随便拿最新版就能往CentOS 7上装。Zabbix官方对CentOS 7的正式支持范围是Zabbix 5.0 LTS及之前的版本再往后的6.0、7.0对操作系统版本有更高要求更建议搭配Rocky Linux 9这类较新的系统。所以如果你手里只有CentOS 7的机器又想跑一套稳定的监控服务5.0 LTS就是最合适的选择长周期维护版本bug修复和安全更新都有保障。CentOS 7虽然已经进入维护末期但在企业内网、实验室、教学环境里存量依然巨大。很多学校机房、公司测试环境、政务内网里跑的就是CentOS 7作为监控服务器完全够用。Zabbix 5.0的架构在4.0基础上做了不少优化前端界面更流畅模板体系更完善告警配置也更灵活用在生产环境也成熟可靠。关于部署架构我先说明一下Zabbix最简部署可以只用一台服务器同时跑Server、Web前端、数据库和Agent。这种all-in-one的方式适合监控节点不超过几十台的场景也是本教程采用的方案。如果以后要监控上百台机器再拆分成Server、数据库、Proxy的分布式架构也不迟前期先跑通再说。1.2 环境要求与镜像源准备安装之前先把硬件和系统基础打牢。官方文档给的最低配置是128MB内存但我强烈建议不要低于2GB内存尤其是还要跑Web界面和数据库的情况。我自己用2核4GB的虚拟机部署一套Zabbix 5.0监控30台左右的主机CPU占用率平时不到10%内存稳定在1.5GB左右非常轻松。磁盘方面系统盘20GB就够系统本身和数据库存储但如果监控数据保留时间比较长建议单独给数据库目录扩容或者挂数据盘。系统安装完成后第一件事换镜像源。CentOS 7的官方源已经停止维护直接用的yum install大概率会卡住或者报404错误。现在国内用得最多的是阿里云镜像源操作如下# 备份原yum源配置 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 下载阿里云CentOS 7源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 清理缓存并生成新缓存 yum clean all yum makecache接下来还要准备Zabbix的官方源。Zabbix官方在阿里云也有镜像下载速度比直接连官方源快得多# 安装Zabbix 5.0的yum源包使用阿里云镜像 rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm # 替换为阿里云Zabbix源地址加快下载速度 sed -i s#repo.zabbix.com#mirrors.aliyun.com/zabbix#g /etc/yum.repos.d/zabbix.repo # 再次清理并生成缓存 yum clean all yum makecache这里有个小细节要提醒你sed替换那一步如果没做后续yum安装zabbix相关包时可能会很慢甚至超时。我第一次装的时候就是因为没换源等了好几分钟才下载完换了阿里云源之后秒下。1.3 基础系统配置SELinux、防火墙与时间同步这三样东西是Zabbix部署中最容易出幺蛾子的地方我在生产环境遇到过好几次诡异问题排查到最后发现都是这几个基础配置没做好。SELinux不建议你在生产环境直接关掉SELinux但如果你是刚学、在测试环境折腾关掉能省掉一堆权限上的麻烦。如果你要在生产环境保持SELinux开启需要额外配置Zabbix的SELinux策略模块这个后面再说。测试环境执行# 查看当前SELinux状态 getenforce # 临时关闭 setenforce 0 # 永久关闭修改配置文件 vi /etc/selinux/config # 将 SELINUXenforcing 改为 SELINUXdisabled永久关闭后需要重启系统才生效你也可以先临时关闭不重启继续操作等所有配置完成后再找时间重启。防火墙Zabbix Server需要对外开放3306数据库端口如果数据库在本机且不远程访问可以不开、80或443Web界面、10051Zabbix Server监听Agent数据。Agent端需要开放10050端口。测试环境最省事的做法是直接停掉firewalldsystemctl stop firewalld systemctl disable firewalld当然生产环境建议精细化放行端口我这里给了那些需要严格管控端口的场景一条命令firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port10051/tcp firewall-cmd --permanent --add-port10050/tcp firewall-cmd --reload时间同步监控系统对时间敏感度极高。如果服务器时间不准Zabbix会因为数据时间戳错乱导致图表显示异常甚至告警误报漏报。CentOS 7默认装的是ntp或者chrony我习惯用chronyyum install -y chrony systemctl start chronyd systemctl enable chronyd # 强制同步一次时间 chronyc -a makestep # 验证时间同步状态 chronyc sources -v我把时间同步放在最前面是因为后面安装数据库、启动Zabbix服务之后再去改时间可能已经产生了很多时间戳错乱的数据还得清理麻烦得很。2. Zabbix Server的安装与核心配置2.1 安装MariaDB数据库并初始化Zabbix Server需要一个数据库来存储监控数据、配置信息、告警记录。CentOS 7自带的数据库是MariaDB这是MySQL的一个分支兼容性很好Zabbix官方文档也明确支持。直接用yum装就行yum install -y mariadb-server mariadb systemctl start mariadb systemctl enable mariadb装好后先做安全初始化这一步会引导你设置root密码、删除匿名用户、禁止root远程登录等建议全程按Y走mysql_secure_installation初始化完成后登录数据库创建Zabbix所需的数据库和用户。这里用root账号登录密码就是刚才设置的mysql -uroot -p进入MySQL命令行后依次执行以下SQL语句# 创建zabbix数据库指定utf8字符集 CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin; # 创建zabbix用户并授权密码建议改成一个自己记得住的强密码 CREATE USER zabbixlocalhost IDENTIFIED BY Your_Strong_Password; # 授权zabbix用户管理zabbix数据库 GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost; # 刷新权限使配置生效 FLUSH PRIVILEGES; # 退出 exit;关于字符集我要特别强调一下这一步直接关系到后面Zabbix Web界面中文是否乱码。utf8_bin是大小写敏感的二进制排序规则Zabbix官方推荐的用它对中文字符的存储和排序都没有兼容问题。如果你漏掉字符集设定用默认的latin1后面导入数据时中文会直接变成问号。2.2 安装Zabbix Server、Web前端与Agent数据库就绪后开始安装Zabbix核心组件。这一步需要安装三个东西zabbix-server-mysql服务端、zabbix-web-mysqlWeb界面、zabbix-agent被监控端代理因为我们要监控本机所以也要装yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent安装过程如果有依赖包提示直接输y确认就行。这个包组里还包含httpdApache和PHP会自动一起装上。这里顺便解释一下为什么要拆这么细。Zabbix是典型的Server-Agent架构Server负责收集数据、触发告警、存储数据Agent安装在每台被监控的机器上负责采集本机数据并上报给ServerWeb前端则是给运维人员操作的图形界面。三者各自独立可以部署在不同机器上但通常入门场景都在一台机器上全部搞定。装完后还有一步非常重要的操作就是把Zabbix官方提供的初始数据导入数据库。这个初始数据包含了默认的模板、监控项、主机组、用户角色等没有它Zabbix前端就是一张白纸啥都干不了# 找到create.sql.gz文件并导入数据库 zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix执行后会提示输入zabbix用户的密码输入刚才在MySQL里设置的那个密码。导入过程对于几十MB的SQL文件可能需要等十几秒看到命令正常返回没有报错就是成功了。导入完成后可以用mysql查看一下数据表确认mysql -uzabbix -p -e USE zabbix; SHOW TABLES; | head能看到一堆表名说明导入成功。2.3 修改Zabbix Server配置并启动服务Zabbix Server的配置文件在/etc/zabbix/zabbix_server.conf核心要修改的只有两项数据库密码和日志文件路径默认日志路径一般不用改。用vi打开配置文件vi /etc/zabbix/zabbix_server.conf找到以下几行取消注释并修改DBHostlocalhost DBNamezabbix DBUserzabbix DBPasswordYour_Strong_Password其中DBPassword这行默认是被注释掉的需要去掉行首的#号填上你实际的数据库密码。DBHostlocalhost的意思是数据库在本机如果你以后把数据库迁移到独立服务器这里要改成数据库服务器的IP。修改完后检查一下配置是否正确grep -E ^(DBHost|DBName|DBUser|DBPassword) /etc/zabbix/zabbix_server.conf确保四项配置都正确显示然后启动Zabbix Server和Agentsystemctl restart zabbix-server zabbix-agent systemctl enable zabbix-server zabbix-agent # 查看服务状态 systemctl status zabbix-server看到绿色的active (running)就说明Server启动成功了。如果启动失败多半是因为数据库密码不对或者初始数据没导入成功用journalctl -u zabbix-server查看日志定位就行。接下来配置Web前端所需的PHP时区。CentOS 7的Apache加载PHP配置文件路径是/etc/httpd/conf.d/zabbix.conf打开这个文件vi /etc/httpd/conf.d/zabbix.conf找到php_value date.timezone这一行去掉注释并修改为上海时区php_value date.timezone Asia/Shanghai保存退出后重启httpd服务systemctl restart httpd systemctl enable httpd时区这步如果不做Zabbix前端配置向导会直接报错提示Time zone is not set没法往下继续。很多新手第一次装到这里就卡住了其实就在这个文件里改一行的事。3. Zabbix Web前端的部署与中文设置3.1 访问Web界面并完成安装向导所有服务启动后在浏览器里输入http://你的服务器IP/zabbix进入Zabbix Web安装向导。如果你的浏览器提示连接超时先检查防火墙是否放行了80端口之前我们测试环境直接关了firewalld就没事。第一次访问会看到一个欢迎界面直接点Next step。第二步是检查环境依赖Zabbix会列出所有需要的PHP扩展和配置项正常的安装结果应该是所有项目都是OK如果有Fail的项要根据提示把缺失的PHP扩展补上。常见的缺失扩展可以用一条命令装齐yum install -y php-bcmath php-mbstring php-gd php-xml php-ldap第三步是配置数据库连接信息这里要填刚才在MySQL里创建的信息数据库类型MySQL数据库主机localhost数据库端口0默认3306数据库名称zabbix数据库用户zabbix数据库密码你设置的密码填完后Zabbix会测试数据库连接连接成功后会提示导入数据。如果你在命令行导入过初始数据产品里会检测到已有数据这一步会直接跳过。接下来设置Zabbix Server的详细信息保持默认即可。最后一步是确认配置汇总点击Finish完成安装。此时Zabbix会生成一个/etc/zabbix/web/zabbix.conf.php文件。安装完成后默认登录账号是Admin注意A大写密码是zabbix登录后系统会提示你修改密码建议第一步就改掉毕竟这是监控系统的总入口默认密码太容易被攻击。3.2 保姆级中文设置前台界面切换默认登录后整个界面是英文的虽然英文界面也能用但中文看着还是亲切很多接下来就把界面切换成中文。点击右上角的用户头像图标进入User profile用户配置页面。点击Language选项卡在Default language下拉框里选择Chinese (zh_CN)。Zabbix 5.0安装包默认自带中文字体包所以正常情况下下拉框里就有中文选项直接选就行选好点Update保存。保存后刷新页面你会发现整个界面已经变成中文了包括左侧菜单、页面按钮、图表标题。这里如果出现中文字体缺失变成方块的情况我后面会在常用排查方案里专门给出解决方案。其实Zabbix 5.0自带的zabbix-web-chinese包就是干这个的安装阶段如果没装这个包语言列表里根本不会出现中文选项。如果你安装的时候没装中文包手动补一下yum install -y zabbix-web-chinese systemctl restart httpd然后回到用户配置页面就能看到中文选项了。3.3 前端界面的整体认知这些功能要先看界面切中文之后先别急着乱点花几分钟把Zabbix的菜单结构摸清楚。左侧主菜单从上到下依次是监控仪表盘、图形、问题、最新数据、主机等日常工作用得最多。报警告警配置、报表设置哪些故障要通知你通知发给谁。数据采集主机、模板、监控项、触发器整个监控体系的核心配置区。用户设置用户、用户组、权限管理。报表系统状态、告警报表周报月报生成。配置系统配置、动作配置、主机维护窗口。新手上路建议先去数据采集 - 主机页面看一圈你会看到一个已经添加成功的主机Zabbix server这就是本机通过Agent采集数据后自动创建的主机。点击它的监控项标签能看到已经采集到的CPU、内存、磁盘等数据每过几秒刷新一次。看到这些数据在动说明整套链路已经通了。4. 添加第一批被监控主机4.1 在客户端安装Zabbix Agent监控系统装好自己不算本事能监控别的机器才算真正入门。添加一台新的Linux主机作为被监控机器分为两步目标机器装Agent并配置指向Server然后在Web界面把主机加进来。假设你要监控的也是一台CentOS 7机器在目标机器上执行# 安装Agent端 rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm sed -i s#repo.zabbix.com#mirrors.aliyun.com/zabbix#g /etc/yum.repos.d/zabbix.repo yum clean all yum makecache yum install -y zabbix-agent装完后修改Agent配置文件指定Zabbix Server的地址。配置文件的路径是/etc/zabbix/zabbix_agentd.confvi /etc/zabbix/zabbix_agentd.conf需要修改三行# Agent的唯一标识默认是主机名保持默认即可 Hostname被监控主机名 # Server填Zabbix Server的IP地址允许该Server主动连接Agent获取数据 Server192.168.1.100 # ServerActive也填Zabbix Server的IP地址这是让Agent主动向Server上报数据用的 ServerActive192.168.1.100注意Server和ServerActive的IP要替换成你实际Zabbix Server的IP地址。Server是告诉Agent允许谁来被动拉取数据ServerActive是告诉Agent主动向谁上报数据。如果你是跨网段添加主机这两个地址都要是Server的真实可达IP。改完后启动Agentsystemctl restart zabbix-agent systemctl enable zabbix-agent # 确认服务状态 systemctl status zabbix-agent同样目标机器的防火墙也要放行10050端口或者在测试环境直接关闭firewalld。4.2 在Web界面中添加主机与关联模板回到Zabbix Server的Web界面点击左侧数据采集 - 主机页面右上角点击创建主机。这里需要填写三项核心内容主机名称自定义一个方便识别的名字比如web-server-01。模板这是最关键的步骤在模板输入框里搜索Template OS Linux by Zabbix agent这个模板点击添加选入列表。这个模板自带了CPU、内存、磁盘、网络、系统负载等几十个监控项和对应的触发器选了它就能直接开监控。接口在这里添加Agent的IP地址和端口端口默认10050IP填目标机器的实际地址。填完点击添加按钮保存。这里有个坑如果输入的IP地址在Agent的Server配置里没有允许主机状态会一直显示灰的监控项显示不支持。所以配置Agent那一步务必保证IP正确同时在Web添加主机时IP也要一致。保存后宿主机的详情页应该可以看到两个标签监控项和触发器中。展开监控项你会看到模板自动创建了几十个监控项往右边拉可以看到最新数据列一两分钟之内就会从不支持变成正常的数值。4.3 验证监控是否正常收集数据添加完主机后用三个维度判断监控是否生效第一看主机状态。在数据采集 - 主机页面主机状态应该是已启用可用性显示绿色的Zabbix agent字样。如果显示红色说明Server连接不上Agent大概率是防火墙或者IP配置问题。第二看最新数据。点进主机详情切到最新数据标签能看到CPU使用率、系统负载、内存剩余量、磁盘空间等数据的实时更新和趋势图。注意第一波数据不是秒出一般要等30到90秒取决于Agent的刷新周期默认1分钟。第三测一下告警链路。在主机详情里有一个触发器标签页里面能看到自动创建的各种触发器比如CPU负载过高、磁盘空间不足。你可以手动在目标机器上跑一个dd或者yes /dev/null 命令把CPU拉高几分钟后Zabbix前端应该会弹出告警仪表盘上的问题数量变成红色。到这一步整个监控链路就跑通了。5. 常见问题排查与经验补充5.1 我踩过的坑安装部署高频报错集中排查我把这几年装Zabbix遇到的高频问题整理成一个排查表每个都标了具体的定位方法和解决办法遇到问题直接对着排查问题现象可能原因定位命令/方法解决办法Web界面打不开httpd没启动或端口被防火墙拦截systemctl status httpd、netstat -tlnp | grep 80启动httpd放行80端口或关闭firewalld安装向导提示数据库连接失败数据库用户名密码错误或授权不完整重新执行mysql -uzabbix -p测试登录用root账号重新授权GRANT ALL ON zabbix.* TO zabbixlocalhost安装向导提示时区未设置PHP时区配置没改grep date.timezone /etc/httpd/conf.d/zabbix.conf改为Asia/Shanghai并重启httpd主机显示红色不可达Agent没启动或Server配置的IP与Agent允许的IP不一致在Agent机器执行systemctl status zabbix-agent启动Agent核对zabbix_agentd.conf的Server字段监控项一直显示不支持Agent版本与Server不匹配或监控项需要额外依赖查看Agent日志tail -f /var/log/zabbix/zabbix_agentd.log统一版本安装Agent机器的必备监控依赖如sysstat前端中文字体变成方块系统缺少中文字体包fc-list :langzh检查系统字体安装中文字体yum install -y wqy-microhei-fonts并修改Zabbix字体配置Server启动即崩溃数据库初始数据未导入或数据库密码错误journalctl -u zabbix-server -n 50重新导入create.sql.gz核对配置文件DBPassword图表时间显示错误系统时区与PHP时区不一致date命令查看系统时间用timedatectl set-timezone Asia/Shanghai统一时区这里重点说下中文乱码的解决方案这是中文用户最常遇到的问题。Zabbix前端使用的字体文件路径是/usr/share/zabbix/assets/fonts/目录下的graphfont.ttf这个字体文件默认是Zabbix自带的英文字体不含中文字符。解决方法是下载一个支持中文的字体替换它# 安装文泉驿微米黑字体 yum install -y wqy-microhei-fonts # 备份原字体 mv /usr/share/zabbix/assets/fonts/graphfont.ttf /usr/share/zabbix/assets/fonts/graphfont.ttf.bak # 创建软链接指向中文字体 ln -s /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf # 清掉浏览器缓存并刷新替换后图形上的中文标注比如主机名、监控项名称就能正常显示了。5.2 日常使用Zabbix的几个实用经验系统跑起来之后下面这几个经验是让我省了不少心的地方监控项不是越多越好。默认的Linux模板有几十个监控项对一般场景完全够了。如果你自己加太多自定义监控项采集频率又调得很高对Server的性能影响会很明显。5.0版本单台Server处理上万监控项没问题但单台Agent上的监控项总数建议控制在100以内。告警通知要配置动作。Zabbix默认只在Web界面显示告警不会主动发邮件或者钉钉消息。想收到告警需要在报警 - 动作 - 触发器动作里创建动作然后在通知方式里配置邮件或Webhook。新手建议先配邮件逻辑最直观。数据保留策略要提前想好。Zabbix默认保留监控数据90天趋势数据365天如果你的磁盘不够大可以在数据采集 - 主机 - 监控项里单个修改历史数据保留周期或者调整定时清理任务的参数。监控30台主机90天的数据大约占4GB左右自己心里有个数。定期备份数据库。Zabbix的配置、主机、模板、告警记录全在数据库里Agent端不需要备份。每周做一次mysqldump备份就能保命mysqldump -uroot -p zabbix /backup/zabbix_$(date %Y%m%d).sql5.3 后续可以进一步折腾的方向部署完这套基础监控后续真正提升实用价值的是下面几个方向。第一给Zabbix加上企业微信或者钉钉的告警通知。Zabbix 5.0的告警媒介配置支持直接调用Webhook网上有现成的Python脚本和Go语言脚本将告警消息推到钉钉群或者企业微信群故障发生两秒内就能收到通知。第二部署Zabbix Proxy做分布式监控。如果你的被监控机器分布在不同的内网网段或者异地机房每台机器都直接连中心Server不太现实Zabbix Proxy可以在每个分点部署一个代理代理负责收数据再统一上报给中心Server。这个架构上的转变能让监控系统的规模从几十台扩展到上千台。第三用Zabbix API做自动化。Zabbix 5.0提供了完整的REST API可以通过Python脚本批量添加主机、创建巡检报表、与CMDB系统联动。我在脚本化运营之后新上线一台服务器到监控系统只需要跑一条命令比在Web界面上手点快太多。这套部署过程我前前后后做了不下几十遍每次都能遇到一些新环境的细节问题。实际上Zabbix本身的安装逻辑非常清晰无非是装包、配库、起服务、配前端四步难就难在环境差异带来的各种小问题。这篇文章里给的排查表基本覆盖了我遇到过的九成问题。你照着走的时候如果卡住了先回头检查三个地方账号密码对不对、防火墙端口通不通、服务状态是不是active大概率问题就出在这三处。最后提醒一句监控系统建起来之后记得随手把Admin密码改了默认密码挂在公网上就是给人送肉鸡的。