ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CentOS 7部署Zabbix监控平台:从环境准备到自定义告警的完整指南

CentOS 7部署Zabbix监控平台:从环境准备到自定义告警的完整指南 把第一台被监控主机接进Zabbix的时候我才真正意识到一个问题网络工程做完不是以“能ping通”为终点。链路通了设备CPU动不动飙到90%你未必知道磁盘写满了HTTP服务明明挂了端口却可能还活着关键业务进程半夜退出等到第二天用户投诉才发现。Zabbix这种监控平台就是用来填这些盲区的。它能把服务器、网络设备、虚拟机、中间件的运行状态全部收进一套系统里历史数据、实时告警、可视化大屏一次搞定。这篇内容围绕CentOS 7上的Zabbix安装部署来写全程保姆级操作从环境准备、Server端搭建、数据库初始化、Web向导设置中文到接入第一台被监控主机、自定义监控项和触发器尽量做到每一步都能照着敲、照着点不走弯路。1. Zabbix到底在监控什么先看网工的现实需求1.1 网络层通了不等于业务层健康做网络工程的兄弟应该都有过这种经历用户报“网站打不开”你跑过去telnet一下地址和端口发现80端口是通的于是判断“网络没问题”。但在运维监控的视角里这个判断过于乐观了。端口通只能说明TCP握手能建立nginx进程是不是真的在工作、后端接口是不是在超时、磁盘剩余空间是不是已经见底这些都不是一次端口探测能看出来的。Zabbix解决的就是这个层面的问题。它通过在被监控主机上安装agent周期性地采集CPU使用率、内存剩余量、磁盘占用、系统负载、进程数量、端口状态等数据再统一交给Zabbix Server处理。Server把数据写进数据库Web前端再从数据库里把数据读出来展示成图表和告警。所以看到的不再是一个冷冰冰的“通或不通”而是一条完整的性能曲线是某个时间点前后系统到底发生了什么变化。Zabbix能监控的东西也远远不止Linux服务器。常见的交换机、路由器只要支持SNMP协议就能被Zabbix纳管Windows主机、VMware虚拟机、数据库、中间件、Docker容器这些也都有对应的采集方式。尤其是做网络工程的朋友如果项目里涉及到一整套机房环境用Zabbix把服务器和网络设备统一纳管比手动写脚本、人工巡检要靠谱得多。1.2 为什么选Zabbix而不是Prometheus、Cacti很多刚开始接触监控的同学会问现在Prometheus不是挺火吗为什么还要学Zabbix我个人的答案很简单场景不一样。Prometheus是一套面向云原生、容器和微服务场景设计的监控体系它的数据模型、服务发现机制在Kubernetes环境下确实很顺手但如果回到传统机房、一堆物理服务器和网络设备Zabbix的开箱模板和经验积累反而更实在。Cacti我也用过画流量图很漂亮但配置相对古老告警能力和模板生态不如Zabbix成熟。从学习成本来看Zabbix的体系是“Agent采集 Server处理 Web展示”概念并不复杂。更关键的是它的官方文档和社区资料非常多遇到问题基本都能搜到答案。对网络工程专业的毕业设计、实验环境搭建或者中小型机房的运维场景来说Zabbix是一个性价比很高的选择。监控平台擅长场景上手难度网络设备支持Zabbix传统服务器、虚拟机、SNMP网络设备中等很成熟Prometheus容器、云原生、微服务中等偏上一般需exporter配合Cacti流量图、历史曲线简单较好但告警偏弱2. CentOS 7环境准备装之前先把这些坑填了2.1 系统安装阶段的三个建议CentOS 7的系统安装本身不复杂但为了后面Zabbix跑得稳有几点值得在装系统阶段就注意。第一选最小化安装不要装图形界面。Zabbix的Web界面是通过浏览器访问的服务器端不需要桌面环境。少装一个GNOME或者KDE能省下大量磁盘和内存也让系统更干净、更不容易出问题。第二磁盘分区尽量给数据库预留空间。Zabbix所有的历史数据、趋势数据都存放在数据库里时间越长数据越大。如果是在虚拟机上做实验默认分区没问题但如果后续要长期使用建议把/var/lib/mysql单独挂一个分区容量给足避免后面磁盘满了再折腾。第三网络要配置成静态IP。实验环境里如果DHCP分配的地址变了Web访问和Agent连接都会跟着出问题。安装时直接写死IP、掩码、网关和DNS后面省心很多。虚拟机的网络模式建议用桥接或者NAT都行只要保证宿主机和虚拟机之间能互相访问。2.2 防火墙、SELinux和时区三个最容易忽略的拦路虎CentOS 7默认开启了firewalld和SELinux这两兄弟会在Zabbix安装过程中制造各种莫名其妙的障碍。比如Zabbix Server启动后监听10051端口结果防火墙没放行Web端根本连不上SELinux如果处于enforcing状态PHP可能无法正常写session文件前端页面会出现各种权限报错。实验环境里我建议直接关闭防火墙和SELinux操作也很简单systemctl stop firewalld systemctl disable firewalld sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config setenforce 0关闭SELinux后可以用getenforce确认当前状态显示Permissive或Disabled就对了。这里多说一句生产环境不建议这样简单粗暴地关掉而是应该按最小权限原则放行对应端口和策略但如果是学习、实验和内部测试关闭防火墙和SELinux能排除掉大量干扰项让你更专注于Zabbix本身。时区问题也容易被忽略。如果服务器时区不是Asia/Shanghai后面Zabbix图形上的时间会差8个小时排查起来还以为数据有问题。顺手统一设置一下timedatectl set-timezone Asia/Shanghai2.3 添加Zabbix官方软件源和MariaDB软件源CentOS 7默认的yum源里没有Zabbix所以第一步要把Zabbix官方的软件源装进去。这里以Zabbix 6.0 LTS为例版本比较新、支持周期长网上资料也多。rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm yum clean all数据库方面CentOS 7自带的是MariaDB 5.5这个版本跑Zabbix 6.0会比较吃力所以我更推荐直接装MariaDB 10.5。用阿里云的镜像源来装速度相对有保障cat /etc/yum.repos.d/mariadb.repo EOF [mariadb] namemariadb baseurlhttps://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64 gpgcheck0 EOF yum install -y MariaDB-server MariaDB-client这里解释一下为什么不用系统自带的mariadb。Zabbix 6.0官方对数据库版本有要求MySQL 5.5这种老版本在字符集、SQL模式和一些查询语法上容易出兼容问题。我们装Zabbix是想让它稳定跑起来不是给自己埋雷。用10.5版本兼容性就没什么好担心的了。3. 安装Zabbix Server和数据库核心组件的完整落地3.1 组件在系统里的对应关系Zabbix整套系统不是单个软件包而是由几个组件配合工作的。安装的时候不建议凭感觉乱装先把它们的角色理清楚组件作用对应软件包Zabbix Server核心服务负责数据采集调度、告警判断zabbix-server-mysql数据库存储配置、历史数据、趋势数据MariaDB ServerWeb前端浏览器访问的可视化界面zabbix-web-mysqlZabbix Agent部署在被监控主机上采集本机数据zabbix-agent初始数据脚本创建Zabbix所需的表结构和预置模板zabbix-sql-scripts上一节我们已经添加了Zabbix软件源接下来直接安装这些组件yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-sql-scripts这个安装过程会自动把httpd、PHP以及相关扩展一并装好。装完之后可以先看一下/etc/httpd/conf.d/zabbix.conf和/usr/share/zabbix目录确认Web前端文件已经就位。3.2 安装MariaDB并完成基本安全初始化MariaDB装好后先启动服务并设置开机自启systemctl start mariadb systemctl enable mariadb接下来执行mysql_secure_installation做安全初始化。这是一个交互式命令会一步步问你是否设置root密码、删除匿名用户、禁止root远程登录、删除test数据库等。实际操作时这样填Enter current password for root直接回车初始密码为空Switch to unix_socket authentication选nChange the root password选y然后输入两遍你想设置的数据库root密码Remove anonymous users选yDisallow root login remotely选yRemove test database and access to it选yReload privilege tables now选y安全初始化做完数据库的root密码就设置好了后面登录数据库都要用这个密码建议找个地方记好。3.3 创建Zabbix数据库和专用账号接下来用root登录数据库创建一个名为zabbix的数据库和一个专用账号。这里不要直接用root账号去跑Zabbix应用权限太大了分开管理更安全。mysql -uroot -p进入MySQL命令行后执行create database zabbix character set utf8mb4 collate utf8mb4_bin; create user zabbixlocalhost identified by Zabbix123; grant all privileges on zabbix.* to zabbixlocalhost; flush privileges; quit;密码Zabbix123只是示例实际使用建议换一个强度够的密码。用utf8mb4字符集是为了让中文数据存进去不乱码这个细节在后面的中文界面设置里很重要。3.4 导入Zabbix初始数据数据库和账号创建好之后要把Zabbix自带的初始数据导入到zabbix库里。这些数据里包括所有预置模板、用户权限、默认监控项、图形配置等不导入的话Web界面进去基本是空壳。zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -pZabbix123 zabbix执行过程中如果没有任何报错输出就说明导入成功了。导入时间根据机器性能不同一般几十秒到几分钟都有可能。导入完成后可以用mysql -uzabbix -pZabbix123 -e use zabbix; show tables;确认一下如果能看到几十张表就说明数据进去了。3.5 配置Server端并启动Zabbix Server的配置文件是/etc/zabbix/zabbix_server.conf默认监听端口10051。我们需要告诉它数据库的密码否则Server连不上数据库启动也会失败。用vim打开配置文件vim /etc/zabbix/zabbix_server.conf找到# DBPassword这一行取消注释并填上刚才设置的数据库密码DBPasswordZabbix123如果数据库不在本机还需要改DBHost像我们这样数据库和Server装在同一台机器上默认的localhost就行。保存退出后启动服务systemctl restart zabbix-server systemctl enable zabbix-server启动后可以看一下日志确认没有报错tail -f /var/log/zabbix/zabbix_server.log看到类似server #0 started [main process]的输出说明Server已经正常工作了。3.6 PHP与httpd的时区调整Zabbix Web前端跑在Apache上PHP默认的时区不是上海时间如果不改后面图形和告警时间都会偏。用vim编辑/etc/httpd/conf.d/zabbix.confvim /etc/httpd/conf.d/zabbix.conf文件里有几行被注释掉的PHP配置找到php_value date.timezone Europe/Riga把前面的#去掉并将时区改成Asia/Shanghaiphp_value date.timezone Asia/Shanghai保存后重启httpd和php-fpm让配置生效systemctl restart httpd php-fpm如果你的环境里没有php-fpm这个服务说明走的是mod_php方式只重启httpd即可不影响结果。4. Web安装向导与中文界面保姆级就是这一步不让你卡住4.1 浏览器进入安装向导在宿主机浏览器里输入http://你的CentOS7服务器IP/zabbix就能看到Zabbix的Web安装向导。第一次进入时第一步是欢迎页和语言选择这里就可以直接选“简体中文”后面的向导会以中文显示这是一开始设置中文最简单的机会。整个安装向导一共分为六步分别是语言选择、PHP前置检查、数据库连接、Zabbix服务器详情、配置摘要、安装完成。正常情况下只要前面的组件安装没有漏前置检查那一步所有项目都会是OK。4.2 数据库连接页面容易踩的坑安装向导走到数据库连接这一步需要填写的信息如下数据库类型MySQL数据库主机localhost数据库端口0表示使用默认端口3306数据库名称zabbix数据库用户zabbix数据库密码你设置的数据库密码示例里是Zabbix123这里最常见的问题是“无法连接数据库”。遇到这种情况先检查MariaDB服务是否在运行然后确认zabbix用户是不是localhost再看密码有没有填对。注意在向导里数据库主机不要填成127.0.0.1再加空格这种低级错误排查起来很浪费时间。填写正确后点击下一步Zabbix会连接数据库并写入初始配置整个过程很快。4.3 登录后把界面切到简体中文安装完成后向导会提示用默认账号登录用户名Admin密码zabbix。第一次登录系统会提醒你修改密码建议顺手改掉。默认登录后界面可能是英文的。点击右上角的用户头像或者“Admin”字样进入“用户设置”在“Language”下拉框里选择“简体中文 (zh_CN)”然后保存。界面会立刻切换成中文菜单、提示、图形标题都会变成中文。如果你在安装向导第一步就已经选了简体中文登录后通常直接就是中文界面这一节的内容可以跳过。但有一些海外模板或者自定义仪表盘里的名称仍然是英文那是模板本身的问题和界面语言无关。4.4 中文界面字形显示成方块的根治中文界面切好后有一个问题马上就会暴露出来监控图形里的中文标题、图例全部显示成方块或者乱码。原因很简单Zabbix默认的绘图字体是DejaVuSans这套字体里根本没有中文字形图形渲染的时候找不到对应字符就画成了方块。解决办法是给Zabbix换一个中文字体。首选开源字体文泉驿微米黑直接yum安装yum install -y wqy-microhei-fonts字体装好后找到字体文件的位置find /usr/share/fonts -name *wqy*然后备份Zabbix默认的字体文件再把中文字体覆盖过去mv /usr/share/zabbix/assets/fonts/DejaVuSans.ttf /usr/share/zabbix/assets/fonts/DejaVuSans.ttf.bak cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/DejaVuSans.ttf操作完成后重启httpd和php-fpm再回到Zabbix刷新监控图形页面中文就能正常显示了。一些教程里会教你去改defines.inc.php里的ZBX_FONT_NAME原理是一样的但需要额外注意字体文件后缀的问题对新手来说直接用覆盖法反而最省事。5. 添加第一台被监控主机Agent端安装与接入5.1 Agent安装和三项关键配置Zabbix Server安装时已经顺带装了zabbix-agent我们可以先把本机接入监控用最直观的方式跑通整个“采集-入库-展示”链路。编辑agent配置文件/etc/zabbix/zabbix_agentd.confvim /etc/zabbix/zabbix_agentd.conf核心配置有以下三项Server127.0.0.1允许哪些Zabbix Server来被动拉取数据。这里填Server的IP本机就填127.0.0.1也可以填完整IP。ServerActive127.0.0.1Agent主动向哪个Server上报数据。同样是Server的IP。Hostnamezabbix-serverAgent的主机名。这个必须在Zabbix Web端添加主机时保持一致否则数据对不上。保存后启动agentsystemctl restart zabbix-agent systemctl enable zabbix-agent如果你要监控另一台独立主机流程也很简单在那台机器上先安装Zabbix官方源再yum install -y zabbix-agent然后同样修改这三项配置重启服务。有一点要注意生产环境中如果开启了防火墙被监控主机的10050端口需要在防火墙里放行否则Server连不上Agent。5.2 Web界面添加主机和模板回到Zabbix Web界面点击左侧菜单“配置”下的“主机”然后点击右上角“创建主机”。这里有几个关键字段“主机名称”填zabbix-server这是主机的技术名称agent配置文件里的Hostname必须和它一致。“可见名称”可以填Zabbix Server或者任意中文名称这个只是显示用的不影响数据匹配。“模板”区域搜索Linux by Zabbix agent点添加。这个模板自带了一套完整的Linux监控项包括CPU、内存、磁盘、网络、系统负载等接入后立刻就有数据。“接口”区域点击“添加”类型选“Agent”IP地址填127.0.0.1如果监控其他主机就填对方的IP端口保持10050。填写完成后点“添加”保存。回到主机列表会看到新主机那一行有一个灰色的ZBX图标。稍等几十秒如果Agent和Server通信正常图标会变成绿色代表可用性检查通过。5.3 验证监控数据真的进来了主机状态变绿只是第一步还要确认数据确实在往里进。点击主机名进入详情页切到“监控项”页签能看到模板自动带进来的几十个监控项每个监控项都有最新的值和更新时间。想看更直观的效果点击左侧“监测”下的“最新数据”在主机筛选里选择刚才添加的主机就能看到CPU使用率、内存剩余、磁盘空间这些实时值在持续刷新。到这里一条完整的监控链路就走通了。6. 自定义监控项与触发器从“能看到”到“能报警”6.1 用proc.num监控进程数模板自带的监控项能满足大部分基础需求但实际环境里总有一些业务进程需要单独盯。Zabbix内置了一个非常实用的键proc.num用来统计指定名称的进程数量格式是proc.num[进程名]。比如我们要监控nginx进程是否存在就在“配置 - 主机 - 监控项”里点“创建监控项”名称Nginx进程数类型Zabbix agent键值proc.num[nginx]信息类型数字无正负更新间隔30s这个监控项的返回结果就是一个整数表示当前系统里匹配“nginx”的进程数量。如果nginx没启动值就是0。6.2 用触发器在进程挂掉时产生告警监控项只是把数据采回来真正产生告警要靠触发器。触发器的作用是当某个监控项的数值满足一定条件时把主机状态从“正常”变成“问题”。在“配置 - 主机 - 触发器”里点“创建触发器”关键配置如下名称Nginx进程数量异常严重性选择“严重”或“警告”表达式last(/zabbix-server/proc.num[nginx])1表达式里的/zabbix-server/是主机技术名后面跟的是监控项的键值1表示进程数小于1。这样只要nginx进程没了触发器就会立刻置为“问题”状态。保存后可以测试一下启动nginx服务触发器状态是OK执行pkill nginx杀掉进程等一个监控周期回到“监测 - 问题”就能看到这条告警出现了。6.3 监控一台Nginx服务的完整小演练把前面几节的步骤串起来可以在同一台机器上做一个小演练。先在CentOS 7上安装nginxyum install -y nginx systemctl start nginx确认进程已经跑起来然后添加proc.num[nginx]监控项再创建触发器。之后打开“监测 - 图形”选择这台主机和“Nginx进程数”监控项能看到一条稳定的进程数量曲线。最后模拟故障pkill nginx过几十秒再刷新图形和问题页就会看到曲线掉到0触发器变成“问题”。重新systemctl start nginx数据恢复触发器也会自动回到OK。这一步做完你对Zabbix的核心工作机制——采集、存储、展示、告警——就有了很完整的认识。后面再接触更复杂的自定义脚本监控项、报警通知都是在这个骨架上扩展的。7. 我从部署到现在踩过的坑报错排查速查7.1 常见报错与处理对照表Zabbix部署过程中新手最容易被几个相似的报错卡住。我把实际操作中遇到过的典型问题和解决办法整理成一张表排查时可以对照着看。报错或现象可能原因处理办法Web前置检查PHP版本过低Zabbix 6.0要求PHP 7.2以上确认Zabbix官方repo的依赖正确安装不要用系统自带老版本PHPCannot connect to the databaseMariaDB未启动、密码错误、zabbix用户不存在检查systemctl status mariadb用mysql命令手动登录验证Timeout while connecting to the agentAgent未启动、防火墙挡了10050端口、Server配置错误在Server上执行telnet 被监控IP 10050测试连通性Get value from agent failedAgent的Hostname和Web端主机名不一致对比/etc/zabbix/zabbix_agentd.conf的Hostname和主机配置图形中文显示方块缺少中文字体参考第4.4节安装文泉驿微米黑并覆盖默认字体图形时间差8小时PHP时区未设置修改/etc/httpd/conf.d/zabbix.conf中的date.timezone为Asia/Shanghaizabbix_server日志报数据库连接错误DBPassword配置错误或数据库权限不对修改/etc/zabbix/zabbix_server.conf并重启服务httpd启动失败端口被占用80端口被其他服务占用用netstat -tlnp7.2 三个值得养成的运维小习惯最后分享三个我实际干活时逐渐养成的习惯它们能让Zabbix的维护轻松很多。第一改任何配置文件之前先备份。Zabbix涉及的配置文件不止一个zabbix_server.conf、zabbix_agentd.conf、zabbix.conf、defines.inc.php哪个改动出问题都可能让服务起不来。我习惯每次编辑前执行cp 文件名 文件名.bak改坏了能立刻回退。第二遇到问题先看日志不要凭感觉反复重启服务。Zabbix服务器端日志在/var/log/zabbix/zabbix_server.logagent日志在/var/log/zabbix/zabbix_agentd.logWeb报错看/var/log/httpd/error_log。日志里每一行都有时间戳和具体报错内容照着日志排查比瞎试效率高得多。第三装完一套环境后把服务自启和端口监听状态都确认一遍。systemctl list-dependencies能看到服务的依赖关系netstat -tlnp可以确认10051、10050、80、3306这几个关键端口是否都在正常监听。端口没起来后面Connection问题会接踵而至。Zabbix这套东西第一次装可能会被各种小问题缠住但只要完整跑通一遍后面的运维和二次开发都会顺手很多。
返回列表