ARTICLE DETAIL

资讯详情

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

CentOS 7.9部署Zabbix 7.0 LTS完整教程:从MySQL8.0到Agent2监控实战

CentOS 7.9部署Zabbix 7.0 LTS完整教程:从MySQL8.0到Agent2监控实战 做运维这些年监控系统一直是刚需。Zabbix 是很多人入门的第一个监控工具功能全面、社区活跃、资料多CentOS 7.9 虽然已经进入了维护周期的尾声但生产环境里仍然有大量存量机器在跑。这篇教程就是写给还在用 CentOS 7.9、想从头搭一套 Zabbix 的读者。我用的版本组合是 Zabbix 7.0 LTS MySQL 8.0整套流程在虚拟机上完整跑过一遍包括常见坑的排错可以直接照着抄。先说结论这套方案从系统准备到 Web 界面出现第一张 CPU 曲线正常操作大概四十分钟。如果你手头正好有 CentOS 7.9 环境想搭一套企业里真正能用的监控系统按下面的步骤一步步来就行。文里所有命令都在 root 用户下执行如果你用普通用户记得自己加 sudo。1. 方案选型与准备工作1.1 版本和架构怎么选Zabbix 版本选择是有讲究的。Zabbix 官方提供 LTS 长期支持版本目前主流生产环境常见的是 6.0 LTS 和 7.0 LTS。7.0 在 2024 年发布组件、API、前端体验都比 6.0 舒服不少而且官方 repo 仍然支持 RHEL/CentOS 7 系列所以这里直接选 7.0 LTS。如果你所在企业还在用 5.0 或 6.0思路完全一样只是软件源地址不同。数据库方面Zabbix 7.0 要求 MySQL 8.0 或 MariaDB 10.5CentOS 7.9 系统自带的 MariaDB 5.5 版本太老不满足要求。所以数据库部分我们单独安装 MySQL 8.0这也是生产环境里最常见的组合。整个监控架构拆开其实就四块Zabbix Server负责数据采集定时任务管理、触发器计算、报警事件处理是整个系统的核心。MySQL存配置信息、历史数据、告警事件Zabbix 所有数据最终都要落库。Zabbix Web 前端跑在 Apache PHP-FPM 上提供浏览器操作界面。Zabbix Agent2装在要监控的机器上采集 CPU、内存、磁盘、网络等指标并汇报给 Server。本篇示例的 IP 规划如下建议你替换成自己环境的实际地址角色IP 地址说明Zabbix Server MySQL Web192.168.10.10本教程安装的主机被监控主机192.168.10.20另外一台 CentOS 7.9 机器1.2 装之前必须做的四项准备第一步先确认系统版本执行cat /etc/redhat-release输出CentOS Linux release 7.9.2009 (Core)就继续往下走。第二步检查网络Zabbix 安装过程需要访问官方 yum 源和 MySQL 官方源确保服务器能出公网。如果机器在离线内网环境后面所有 rpm 包都得提前下载好那操作路径会复杂不少。第三步是关闭防火墙和 SELinux。这步在保姆教程里我直接建议关掉不是偷懒是为了减少新手踩坑点。生产环境当然不应该简单粗暴关闭而是放行对应端口但 CentOS 7 里 SELinux 的默认策略对 Zabbix 写文件限制很烦排错成本高。systemctl disable --now firewalld setenforce 0 sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config第四步是时间同步。Zabbix 对时间非常敏感Server 和 Agent 之间时间差太大会出现数据不采集、历史数据显示异常的情况。CentOS 7 自带的 chrony 需要先确认在正常工作。yum install -y chrony systemctl enable --now chronyd timedatectl set-timezone Asia/Shanghai chronyc sources -v看到^*开头的行说明时间源已同步。这步做完环境准备结束可以开始装数据库了。2. 数据库部署MySQL 8.0安装与初始化2.1 为什么不用系统自带的 MariaDBZabbix 7.0 官方文档明确要求 MySQL 8.0 或 MariaDB 10.5。CentOS 7.9 默认 yum 源里的 MariaDB 是 5.5 版本用了之后大概率会遇到初始库导入失败、触发器执行报错等问题而且网上 90% 的“安装后各种怪问题”都跟数据库版本太老有关。与其排查那些历史遗留问题不如直接上 MySQL 8.0。另外MySQL 8.0 和 5.7 在 SQL 语法、认证插件上的差异也需要知道。Zabbix 官方初始 SQL 支持 MySQL 8.0所以不用管兼容性跟着装就行。2.2 安装并初始化 MySQL 8.0先添加 MySQL 官方 Yum 仓库源命令如下rpm -ivh https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm如果提示 404 或者地址变了就去 MySQL 官方 Yum Repository 页面找对应 Red Hat Enterprise Linux 7 的 rpm 下载地址。装完源之后检查一下源文件确认启用的仓库是mysql80-communityyum repolist enabled | grep mysql然后安装 MySQL 服务端并启动yum install -y mysql-community-server systemctl start mysqld systemctl enable mysqldMySQL 8.0 安装后会自动生成一个临时 root 密码这在日志里才能看到grep temporary password /var/log/mysqld.log拿到临时密码后登录 MySQL然后必须立刻修改 root 密码。MySQL 8.0 默认密码策略要求密码必须包含大小写字母、数字和特殊符号如果不想要这个限制可以先把策略调低mysql -uroot -p输入临时密码进入 MySQL 命令行后依次执行ALTER USER rootlocalhost IDENTIFIED BY Root123456; SET GLOBAL validate_password.policy LOW; ALTER USER rootlocalhost IDENTIFIED BY root123; FLUSH PRIVILEGES;注意在 MySQL 8.0 某些版本中变量名是validate_password.policy如果执行报错就换成validate_password_policy。这一步的作用是方便后续测试环境使用简单密码生产环境建议保持默认强密码策略。2.3 创建 Zabbix 数据库账户和初始表数据库装好后给 Zabbix 创建独立的库和专用账号。搞过生产环境的人应该都知道不要用 root 账号跑业务权限隔离是最基本的底线CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER zabbixlocalhost IDENTIFIED BY Zabbix123; GRANT ALL PRIVILEGES ON zabbix.* TO zabbixlocalhost; FLUSH PRIVILEGES;如果之后安装 Web 前端时遇到数据库连接问题注意看 MySQL 8.0 默认的认证插件是caching_sha2_password而 Zabbix Server 连接 MySQL 时可能因为客户端版本问题报认证失败后面排错章节会细说。接下来导入 Zabbix 官方提供的初始 SQL。这个文件在安装zabbix-server-mysql之前其实已经有了路径是/usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz但在导入前需要先确保安装了 zabbix-sql-scripts 包。实际操作时我建议先往下走装完 Zabbix Server 软件包后再回来执行导入命令。不过为了逻辑顺畅这里先把命令写出来zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-setutf8mb4 -uzabbix -pZabbix123 zabbix这个命令干的事是解压官方初始 SQL并导入到 zabbix 库。整个导入过程会持续几分钟如果中途报错立刻停下来先去确认数据库版本是否满足要求、字符集是否正确。导入结束后登进 MySQL 验证一下USE zabbix; SHOW TABLES;如果看到users、hosts、items等表说明初始库导入成功。3. Zabbix Server 安装与配置3.1 安装 Server、Web 和 Agent2 软件包先添加 Zabbix 官方 Yum 源这是整个流程中决定成败的一步rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/7/x86_64/zabbix-release-7.0-1.el7.noarch.rpm yum clean all yum makecache然后一次性安装三个核心软件包yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent2zabbix-server-mysql是 Server 主程序zabbix-web-mysql是 Web 前端和 PHP 相关依赖zabbix-agent2是新版 Agent比老版 Agent 支持更多插件、采集更灵活所以直接装 Agent2。Zabbix 7.0 在 CentOS 7 上默认使用 Remi 仓库的 PHP 8.1安装过程中需要确认/etc/opt/remi/php-8.1/php-fpm.d/zabbix.conf这个文件存在后面改时区要用到。安装完成后回到 2.3 节那条导入初始 SQL 的命令现在可以正式执行了zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-setutf8mb4 -uzabbix -pZabbix123 zabbix输入密码后静默执行等终端回到提示符就是导入完成。3.2 修改 zabbix_server.conf 数据库连接Zabbix Server 怎么知道数据库在哪里、账号密码是什么全靠/etc/zabbix/zabbix_server.conf文件。打开这个文件找到下面几行并修改DBHostlocalhost DBNamezabbix DBUserzabbix DBPasswordZabbix123DBHost如果你的 MySQL 和 Zabbix 在同一台机器写localhost或者留空都行。DBPassword一定要和 2.3 节创建的密码一致这是新手最容易错的地方。保存退出后用命令校验一下配置能不能被正确解析zabbix_server -t -c /etc/zabbix/zabbix_server.conf输出OK就表示配置没问题。这里有个细节密码如果包含$、!、等特殊字符在 shell 里导入 SQL 和改配置文件时都要小心。我建议密码干脆只用大小写字母加数字生产环境可以再复杂一点但一定记得把特殊字符转义问题处理好。3.3 配置PHP时区并重启服务Web 前端依赖 PHP-FPMPHP 的时区不设置会出现告警时间不对、图形时间错乱这类问题。修改/etc/opt/remi/php-8.1/php-fpm.d/zabbix.conf在文件末尾加一行php_value[date.timezone] Asia/Shanghai然后启动所有服务并设置开机自启。注意服务名Zabbix 7.0 在 CentOS 7 上用的 PHP-FPM 服务名是php-fpm-8.1不是php-fpmsystemctl restart zabbix-server zabbix-agent2 httpd php-fpm-8.1 systemctl enable zabbix-server zabbix-agent2 httpd php-fpm-8.1如果提示找不到php-fpm-8.1执行systemctl list-unit-files | grep php查一下实际服务名。启动完成后立刻看 Zabbix Server 日志tail -f /var/log/zabbix/zabbix_server.log日志滚动出listener #1 [waiting for connection]这种信息说明 Server 已经正常拉起来了。要是日志里有cannot connect to database之类的话就是数据库连接配置有问题回头检查 3.2 节的四项参数。4. Web 前端安装与初始化4.1 浏览器里的六步向导到这一步Zabbix Server 已经在后台运行了接下来通过浏览器完成 Web 前端安装。打开http://192.168.10.10/zabbix进入安装向导。第一步是语言选择默认 English可以先选 English等装完再改成中文因为安装向导的中文语言包偶尔有翻译缺失影响判断。第二步会检查 PHP 环境的前置条件官方源安装的依赖一般情况下全部是 OK 状态如果有Fail项就按提示安装对应 PHP 扩展常见的是php-ldap、php-gd之类yum install -y php81-php-ldap php81-php-gd第三步是配置数据库连接填四项内容数据库地址填localhost端口默认 3306数据库名填zabbix用户名和密码填创建 zabbix 用户时用的账号密码。填完点下一步如果这里报access denied for user replace_userlocalhost大概率是账号密码填错或者 MySQL 认证插件问题具体见第 6 章。第四步是 Zabbix Server 配置默认值即可。第五步是安装前摘要确认第六步点完成页面会提示配置文件已经生成把文件下载下来放到指定目录。Zabbix 6.0 之后的版本其实会自动写/etc/zabbix/web/zabbix.conf.php如果自动写失败再手动创建目录上传文件。4.2 安装完成后记得改默认密码安装完成后用默认账号登录用户名Admin密码zabbix注意 A 大写。登录后第一件事就是改密码路径是右上角人头图标→用户→设置→密码。默认密码太容易被扫到这是监控系统安全运维里最基础的一环。登录后把语言切换到中文用户→用户→语言选“简体中文”并更新。如果发现图形里的中文乱码多半是系统缺少中文字体先按 6.1 节的方法处理。Web 前端装好后整个监控系统的“大脑”和“操作台”就都在了下面开始装 Agent把第一台机器纳入监控。5. 添加第一台 Linux 被监控主机5.1 在被监控机上安装并配置 Agent2我现在假设被监控机是另一台 IP 为 192.168.10.20 的 CentOS 7.9。先在这台机器上添加 Zabbix 官方源并安装 Agent2rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/7/x86_64/zabbix-release-7.0-1.el7.noarch.rpm yum clean all yum install -y zabbix-agent2然后修改 Agent2 的配置文件/etc/zabbix/zabbix_agent2.conf。关注这三项Server192.168.10.10 ServerActive192.168.10.10 Hostnamenode1Server是允许谁来采集我数据的白名单这里填 Zabbix Server 的地址。ServerActive是主动模式上报时连接的 Server 地址。Hostname很有讲究它必须和后面在 Web 界面添加主机时填写的“主机名称”完全一致否则主动类型监控项会一直报连接不上。改完后重启systemctl restart zabbix-agent2 systemctl enable zabbix-agent2为了验证 Zabbix Server 到 Agent 的网络通不通在 Server 机器上用工具测一下 10050 端口。telnet没装就安装或者用ncyum install -y nc nc -vz 192.168.10.20 10050看到succeeded说明网络通。5.2 Web 端添加主机和模板回到 Web 界面左侧菜单“监控”下有“主机”或“配置”菜单。点击“创建主机”填写三块内容主机名称填node1必须和 Agent2 配置文件里的 Hostname 一致。可见名称可以填中文描述比如“服务器-1”纯显示用。接口类型选“Agent”IP 地址填 192.168.10.20端口保持 10050。填完后页面上方的“模板”区域搜索Linux by Zabbix agent并添加这个模板自带几十个系统监控项和告警触发器CPU、内存、磁盘、网络全都覆盖了。保存后回到主机列表等几十秒新主机的“Zabbix agent”监控项状态应该变成绿色“已启用”可用性显示为“已连接”。5.3 验证数据是否真的采上来了很多新手到这里就以为完事了其实还要验证一下数据真的进系统了。进“监控”→“最新数据”筛选主机node1你会看到一条一条的监控项比如 CPU 使用率、系统负载、空闲内存。点数值右边的“图形”图标能看到实时的曲线在画出来。如果看到“等待首次采集”或者图上没数据先排查三件事主机上的 Agent 是否启动10050 端口是否放行系统时间是否同步。把这三点排查完一般数据就出来了。6. 安装过程中最常踩的坑与排查6.1 Zabbix 相关报错安装 Zabbix 的报错种类挺多但高频的就那几个。第一个是日志里出现access denied for user replace_userlocalhost (using password: YES)这个报错的replace_user不是固定用户名它只是安装文档里的占位符实际报错时会显示你配置的数据库用户名。看到这个先别慌按顺序检查数据库密码是否输正确zabbix 用户是否只授权了localhost而配置里用了远程地址MySQL 8.0 的认证插件是不是caching_sha2_password。第三个问题最隐蔽PHP 的 mysqli 扩展在低版本里不认 MySQL 8.0 默认认证插件。解决办法是登录 MySQL 把 zabbix 用户的认证方式改成老式的mysql_native_passwordALTER USER zabbixlocalhost IDENTIFIED WITH mysql_native_password BY Zabbix123; FLUSH PRIVILEGES;改完再重启 zabbix-server 和 php-fpm。第二个高频问题是前端打开显示504 Gateway Timeout。Zabbix 7.0 的 Web 前端不在 Apache 里跑 PHP 模块而是通过 PHP-FPM 处理动态请求。504 一般就是 PHP-FPM 没起来或者进程卡死。先看服务状态再用kill -QUIT的方式让 FPM 重新加载配置。启动顺序上有讲究先启php-fpm-8.1再启httpd。第三个问题是图形里的中文全是方块乱码。原因是 Zabbix 前端默认字体是 DejaVu Sans不支持中文。解决方法是装中文字体并替换yum install -y wqy-microhei-fonts cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/DejaVuSans.ttf覆盖前建议先备份原字体文件。改完刷新浏览器页面中文就正常了。6.2 MySQL 与 PHP 联动问题很多人装完 MySQL 后Zabbix Server 日志里反复出现database is down。这不一定真的是数据库挂了很可能是系统重启时 mysqld 还没有完全起来zabbix-server 先启动了连接失败后进入重试。确认 mysqld 服务是开机自启的然后手动重启 zabbix-server 就可以恢复。MySQL 8.0 的内存占用比 5.7 高不少如果虚拟机就分配了 2GB 内存MySQL 默认配置可能直接吃掉一大半导致 Zabbix Server 内存不足被 OOM。安装调试阶段可以临时调低 MySQL 内存相关参数比如innodb_buffer_pool_size改成 256M 再重启能明显缓解内存压力。PHP 方面最常见的坑是时区没有写对/etc/opt/remi/php-8.1/php-fpm.d/zabbix.conf改了时区后必须要systemctl restart php-fpm-8.1光改文件不重启等于白干。6.3 配置细节速查配置文件关键参数修改后需重启的服务/etc/zabbix/zabbix_server.confDBHost、DBName、DBUser、DBPasswordzabbix-server/etc/zabbix/zabbix_agent2.confServer、ServerActive、Hostnamezabbix-agent2/etc/opt/remi/php-8.1/php-fpm.d/zabbix.confphp_value[date.timezone]php-fpm-8.1、httpd/etc/selinux/configSELINUXdisabled重启系统后生效7. 装完之后可以做点什么7.1 先加一个自定义监控项Zabbix 默认模板只是基础监控实际业务里经常要监控“进程在不在”“日志里有没有 ERROR”“接口返回码是否有 500”这类定制化指标。自定义监控项思路很简单Agent 执行一个命令或脚本把结果交给 Zabbix Server。比如要监控 Nginx 进程数量先在被监控机上新建一个 KeyUserParameternginx.process.num,pgrep -c nginx加到/etc/zabbix/zabbix_agent2.d/userparameter_nginx.conf里重启 zabbix-agent2。然后在 Web 端为主机添加监控项键值填nginx.process.num单位填“个”更新间隔 30 秒。这样自定义监控就生效了。这个能力是 Zabbix 最值钱的地方不是装完就结束了而是可以把任何你想知道的指标都收进监控系统里。7.2 给钉钉机器人发告警监控装好了告警推送到哪邮件太传统钉钉群机器人是目前国内团队最常用的方式。Zabbix 7.0 的告警媒介类型里自带 Webhook 支持可以通过脚本调用钉钉机器人的 Webhook 地址把告警消息推送到群里。大致流程是先建一个钉钉群添加自定义机器人拿到一个 Webhook URL。然后在 Zabbix Web 端创建告警媒介类型用脚本或 Webhook 方式发送 JSON 数据到该地址最后在用户动作里配置触发条件和告警内容模板。这个展开写又是一篇长文但前提是 Zabbix 安装正确、主机告警能正常产生事件后面的联动才有意义。最后再分享一个小经验Zabbix 装完第一时间先把 Server 这台的磁盘监控和自身进程监控加上然后配置好历史数据保留策略。很多人装完不管等监控跑了几个月发现磁盘被 Zabbix 历史数据塞满再回头清理就麻烦了。数据保留策略在“管理”→“一般”→“历史记录”里设置刚入门建议历史数据保留 14 天、趋势数据保留 365 天够用又不占太多空间。这一步做不做直接决定了你的监控系统能安安稳稳跑多久。
返回列表