当前位置:首页 > 知识

搭建zabbix

Zabbix 跑起来不难,搭建难的搭建是你装完第一遍之后,还想装第二遍。搭建我前后搭过七八套 Zabbix,搭建从 4.0 到 6.4,搭建踩的搭建坑基本都集中在数据库、SELinux 和 PHP 配置这三块。搭建下面这份记录以 Rocky Linux 9 + MySQL 8 + Zabbix 6.4 为例,搭建步骤是搭建干净的,但我会把容易翻车的搭建地方标出来。

先把系统环境收拾干净

新装的搭建机器别急着装包,先把 SELinux 关掉或者设成 permissive。搭建Zabbix 的搭建 Web 前端和 agent 在 enforcing 模式下经常被拦,日志里报 permission denied,搭建你查半天以为是搭建权限问题,其实是 SELinux 在作祟。改 /etc/selinux/config,把 SELINUX=enforcing 改成 permissive,然后 setenforce 0 立即生效。

防火墙这边,Zabbix server 要开 10051,Web 前端要开 80 或 443,agent 要开 10050。生产环境别图省事直接 systemctl stop firewalld,用 firewall-cmd --permanent --add-port=10051/tcp 这种写法,重载后生效。

数据库不是装完就行

MySQL 8 的默认字符集是 utf8mb4,这个不用改。但 Zabbix 要求 log_bin_trust_function_creators=1,否则导入 schema 时会报错,提示你无法创建函数。在 /etc/my.cnf 的 [mysqld] 段加上这一行,重启 MySQL。

建库建用户这步很多人复制粘贴就过了,但密码策略在 MySQL 8 里变严格了。如果报密码太简单,要么换复杂密码,要么临时 set global validate_password.policy=0。我一般直接给个带大小写和符号的密码,省事。

 CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Zabbix@2024'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost'; FLUSH PRIVILEGES; 

导入初始数据的时候注意顺序:先 schema.sql,再 images.sql,最后 data.sql。这三个文件在源码包的 database/mysql/ 目录下。data.sql 导入慢,几万条记录,别以为卡死了。

Zabbix server 和前端分开装

官方仓库直接装最省心。Rocky 9 上先装 zabbix-release-6.4-1.el9.noarch.rpm,然后 dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-agent。这一条命令把该装的都装了。

改 /etc/zabbix/zabbix_server.conf,重点就三行:DBHost=localhost、DBName=zabbix、DBUser=zabbix、DBPassword=你的密码。别漏了 DBPassword,默认是注释掉的。

PHP 那边,/etc/php-fpm.d/zabbix.conf 里把 date.timezone 设成 Asia/Shanghai。不设的话前端会报时区错误,页面能打开但图表时间全乱。

启动顺序和验证

先启 zabbix-server,再启 httpd 和 php-fpm。用 systemctl enable --now zabbix-server zabbix-agent httpd php-fpm 一次搞定。然后 tail -f /var/log/zabbix/zabbix_server.log,看到 “server #0 started” 才算真正跑起来。

浏览器访问 http://你的IP/zabbix,默认账号 Admin,密码 zabbix。进去第一件事改密码,第二件事检查 “Reports → System information”,看 server 是否在运行。如果显示 “Zabbix server is not running”,八成是 SELinux 或者数据库连不上,回去查日志。

几个我踩过的坑

MySQL 8 的 caching_sha2_password 认证插件,Zabbix 6.4 之前的版本不支持。如果 server 日志报认证失败,把用户改成 mysql_native_password:ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';。6.4 之后原生支持了,但老版本升级上来的容易忘这茬。

还有 agent 的 Server 配置项,填的是 Zabbix server 的 IP,不是 agent 自己的 IP。这个搞反了,agent 日志里会一直报 “no active checks on server”,但服务状态是 active,新手很容易懵。

搭完这一套,监控本机基本够用了。要监控别的机器,装 agent 就行,配置比 server 简单得多。真正花时间的是后面调模板、配触发器,那又是另一个故事了。

分享到: