1. 项目概述:为什么在 Ubuntu 18.04 上部署 Zabbix 监控不是“装个软件”那么简单
Zabbix 是我过去八年里在中小规模 IT 基础设施中用得最稳、改得最透的开源监控系统。它不像 Prometheus 那样靠生态拼图,也不像 Nagios 那样靠插件堆叠——Zabbix 是一个“全栈自洽”的监控引擎:从数据采集(Agent/SSH/SNMP/IPMI/JMX)、存储(原生支持 MySQL/PostgreSQL/Oracle)、计算(触发器表达式、函数、依赖关系)、告警(邮件/短信/微信/飞书/钉钉/Webhook)、可视化(仪表盘、拓扑图、SLA 报表)到权限控制(用户组、动作条件、读写分离),全部内置,开箱即用。但正因如此,它的安装配置不是
apt install zabbix-server
一行命令就能搞定的事。尤其在 Ubuntu 18.04 这个承上启下的 LTS 版本上——它自带的 PHP 7.2 已不满足 Zabbix 5.0+ 的最低要求,MySQL 5.7 默认禁用
sql_mode=NO_AUTO_CREATE_USER
导致 Zabbix 初始化失败,而 Apache 2.4 的
mod_php
模块又与新版 Zabbix 的 session 处理存在兼容性隐患。我亲眼见过三支运维团队在同一套环境里反复重装:一支卡在数据库初始化报错
ERROR 1067 (42000): Invalid default value for 'clock'
;一支被
zabbix_server
启动后立即退出却无日志的问题折磨三天;还有一支在 Web 界面登录时反复跳转
/zabbix/setup.php
,最后发现是
/var/www/html/zabbix
目录权限被
umask 022
错误继承,导致
conf/zabbix.conf.php
不可写。这些都不是文档里写的“常见问题”,而是 Ubuntu 18.04 + Zabbix 组合在真实机房里踩出来的坑。所以这篇内容不是教你怎么“安装 Zabbix”,而是带你把整个部署链路拆成可验证、可回滚、可审计的原子操作:从内核参数调优开始,到数据库字符集校验,再到 Agent 主动模式的证书双向认证,每一步都附带
curl -v
实测响应、
ss -tuln | grep :10050
端口快照、
zabbix_get -s 127.0.0.1 -k "system.uptime"
数据回传验证。适合两类人:一是刚接手遗留 Ubuntu 18.04 服务器集群、需要快速建立基础监控能力的运维工程师;二是正在准备 Zabbix 面试题、想搞懂“为什么必须用
zabbix_agentd -t agent.ping
而不是
ping
来验证 Agent 状态”的候选人。你不需要会写 SQL,但得知道
innodb_buffer_pool_size
设为物理内存的 50%~75% 是怎么算出来的;你不用背熟所有触发器函数,但得明白
nodata(300)
和
fuzzytime(60)
在时间同步异常场景下的行为差异。这才是真正在生产环境跑得起来的 Zabbix。
2. 整体架构设计与方案选型逻辑:为什么坚持用 LAMP 而非 Docker?
2.1 为什么放弃 Docker Compose 一键部署?
Zabbix 官方确实提供了
docker-compose.yml
,但在我经手的 17 个 Ubuntu 18.04 生产环境(含金融、教育、制造行业)中,有 12 个明确拒绝了容器化方案。原因很实际:第一,Ubuntu 18.04 的
docker-ce
包源不稳定,
apt update && apt install docker-ce
经常因
https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/
CDN 节点返回 404 导致失败;第二,Zabbix Server 容器与宿主机时间不同步时,
trigger
的
lastchange
字段会漂移,导致“设备已恢复但告警未清除”;第三,也是最关键的——Zabbix Agent 必须以
--privileged
模式运行才能采集
proc.meminfo
或执行
system.run["df -h"]
,而这直接违反企业安全基线。我试过用
hostnetwork
模式绕过端口映射,结果发现
zabbix_server
容器无法解析宿主机
/etc/hosts
中定义的内部 DNS 别名,导致自动发现(LLD)获取的主机名全是 IP,后续模板绑定全乱。所以最终方案回归传统 LAMP:Apache 2.4 + MySQL 5.7 + PHP 7.4(手动编译)+ Zabbix 5.0.32(源码编译)。这个组合看似“复古”,实则可控:每个组件版本号精确到 patch level,配置文件路径固定(
/etc/apache2/sites-enabled/000-default.conf
),日志路径统一(
/var/log/zabbix/
),连
zabbix_server.conf
里
LogType=file
的日志轮转都能用
logrotate
原生接管。更重要的是,当客户要求“审计所有监控数据落盘路径”时,我能直接给出
SELECT * FROM zabbix.history_text WHERE clock > UNIX_TIMESTAMP('2023-01-01') LIMIT 10;
的查询语句,而不是解释“容器卷挂载到了哪个宿主机目录”。
2.2 为什么选择 Zabbix 5.0.x 而非 6.0+?
Zabbix 6.0 引入了全新的前端框架(Vue 3 + Vite),UI 更现代,但代价是 PHP 8.0+ 强制依赖。而 Ubuntu 18.04 官方仓库的
php8.0
包直到 2021 年 10 月才进入
bionic-updates
源,且默认启用
opcache.preload
,与 Zabbix 6.0 的
vendor/autoload.php
加载机制冲突。我实测过:
php -v
显示 8.0.28,但访问
/zabbix
时 Apache 错误日志里全是
PHP Fatal error: Uncaught Error: Class 'Zabbix\Widgets\Widget' not found
。退而求其次用
ondrej/php
PPA 源安装 PHP 8.1,又触发 MySQL 5.7 的
default_authentication_plugin=caching_sha2_password
兼容性问题——Zabbix 6.0 的
zabbix_server
进程根本连不上数据库。Zabbix 5.0.32 则完美适配:它要求 PHP 7.2+,而我们通过
ppa:ondrej/php
安装的 PHP 7.4.33 已通过所有单元测试;它支持 MySQL 5.7 的
STRICT_TRANS_TABLES
模式;它的 Agent 支持
TLSConnect=psk
且 PSK 密钥长度可设为 32 字节(符合国密 SM4 最小密钥要求)。更重要的是,5.0.x 的触发器语法更贴近运维直觉:
{HOST.NAME} matches "web-.*"
比 6.0 的
{HOST.NAME}.regsub("web-(.*)", "\1")
更易调试。我在某银行项目中用 5.0.32 实现了“核心交易系统 TPS 低于阈值持续 5 分钟触发短信告警”,整个规则只用了 3 行表达式,而换成 6.0 后,同样逻辑要写 7 行且需额外配置 JS 函数库。
2.3 为什么坚持源码编译而非
apt install
?
Ubuntu 18.04 官方仓库里的
zabbix-server-mysql
包版本是 1:3.0.3+dfsg-1ubuntu1,这是 2017 年的古董版。它不支持 SNMPv3 的
authPriv
模式,无法对接华为 S5735-L 交换机的加密 SNMP;它的
zabbix_agentd
编译时未启用
--with-libcurl
,导致无法使用
web.page.get
监控 HTTPS 页面状态码;最致命的是,它的
zabbix_server
二进制文件链接的是系统默认 OpenSSL 1.1.1,而客户内网 CA 根证书是 SHA-256 签发的,旧版 OpenSSL 会静默忽略证书链验证。我对比过:
apt install zabbix-server-mysql
安装的
zabbix_server
进程,
ldd /usr/bin/zabbix_server | grep ssl
输出
libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1
;而源码编译时指定
--with-openssl=/usr/local/ssl
(我们自己编译的 OpenSSL 1.1.1w),
ldd
输出变为
libssl.so.1.1 => /usr/local/ssl/lib/libssl.so.1.1
,且
zabbix_server -V
显示
SSL library: OpenSSL 1.1.1w 11 Sep 2023
。这直接解决了客户“监控平台必须通过等保三级 SSL 双向认证”的硬性要求。源码编译的另一个好处是符号表完整:当
zabbix_server
因
malloc(): corrupted top size
崩溃时,
coredumpctl debug zabbix_server
能精准定位到
src/zabbix_server/poller/poller.c:1245
的内存越界,而不是
?? ()
这样的问号堆栈。
3. 核心细节解析与实操要点:从系统预检到 Web 界面首登
3.1 系统级预检:5 个必须验证的底层状态
Zabbix 对系统环境极其敏感,很多“安装失败”其实源于前置条件未满足。我总结出 5 个必查项,每个都附带一行命令和预期输出:
-
SELinux 状态 :Ubuntu 18.04 默认不启用 SELinux,但某些定制镜像会开启。执行
sudo sestatus,预期输出SELinux status: disabled。若显示enabled,必须执行sudo nano /etc/selinux/config将SELINUX=enforcing改为SELINUX=disabled,然后重启。曾有个客户环境sestatus显示permissive,看似无害,但 Zabbix Agent 的system.run执行ls /proc/*/fd时会被 SELinux 拦截,日志里只有avc: denied { read } for pid=1234 comm="zabbix_agentd",毫无上下文。 -
时区与 NTP 同步 :执行
timedatectl status | grep -E "(Time zone|System clock synchronized)",预期输出Time zone: Asia/Shanghai和System clock synchronized: yes。若synchronized为no,先sudo timedatectl set-ntp true,再sudo systemctl restart systemd-timesyncd。Zabbix 的history表clock字段是 Unix 时间戳,若服务器时间比 NTP 服务器慢 3 分钟,所有触发器的lastchange都会延迟 3 分钟,导致告警延迟。 -
可用内存与 Swap :执行
free -h && swapon --show=NAME,TYPE,SIZE,PRI。Zabbix Server 推荐最小内存 4GB,且swappiness应设为 1(非 60)。echo 'vm.swappiness=1' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p。曾有个 2GB 内存的虚拟机,zabbix_server启动后因 OOM Killer 杀死进程,dmesg | grep -i "killed process"显示zabbix_server被干掉,根源就是swappiness=60导致内核过度使用 Swap。 -
文件描述符限制 :执行
ulimit -n,预期输出65536或更高。若为1024,需修改/etc/security/limits.conf,添加zabbix soft nofile 65536和zabbix hard nofile 65536,并确保/etc/pam.d/common-session包含session required pam_limits.so。Zabbix Server 默认StartPollers=5,每个 Poller 线程可能打开数百个 socket,1024 的限制会导致zabbix_server.log出现cannot create socket: Too many open files。 -
IPv6 状态 :执行
cat /proc/sys/net/ipv6/conf/all/disable_ipv6,预期输出1。Ubuntu 18.04 的zabbix_server若检测到 IPv6 可用,会尝试绑定::1:10051,但若防火墙未放行 IPv6,netstat -tuln | grep :10051看不到监听,且日志无提示。echo 'net.ipv6.conf.all.disable_ipv6 = 1' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p是最稳妥的解法。
提示:以上检查必须在
apt update之前完成。我见过最离谱的案例:客户在apt update后执行timedatectl set-timezone Asia/Shanghai,结果apt的 HTTPS 连接因证书时间验证失败全部超时,因为系统时间被重置为 1970 年。
3.2 数据库初始化:MySQL 5.7 的 3 个致命陷阱
Zabbix 官方文档说“创建数据库并导入 schema”,但 Ubuntu 18.04 的 MySQL 5.7 默认配置埋了三个雷:
陷阱一:
sql_mode
兼容性
MySQL 5.7 默认
sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
。其中
NO_AUTO_CREATE_USER
会导致 Zabbix 的
create.sql
执行失败,报错
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
。解决方案不是降级 MySQL,而是临时修改:
sudo mysql -u root -p -e "SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'NO_AUTO_CREATE_USER',''));"
。注意,这是
GLOBAL
级别,重启 MySQL 会恢复,所以必须在导入 schema 前执行。
陷阱二:
innodb_file_per_table
必须启用
Zabbix 的
history_text
表单条记录可达 64KB,若
innodb_file_per_table=OFF
,所有表数据都写入
ibdata1
,一旦该文件损坏,整个数据库不可恢复。执行
sudo mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_file_per_table';"
,若
Value
为
OFF
,编辑
/etc/mysql/mysql.conf.d/mysqld.cnf
,在
[mysqld]
下添加
innodb_file_per_table=ON
,然后
sudo systemctl restart mysql
。
陷阱三:字符集必须为
utf8mb4
Zabbix 5.0+ 要求数据库、表、列均为
utf8mb4
,否则中文主机名或告警信息会乱码。创建数据库时不能用
CREATE DATABASE zabbix CHARACTER SET utf8;
,而必须用:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
导入 schema 前,先确认
mysql
客户端编码:
mysql --defaults-file=/etc/mysql/debian.cnf -N -s -e "SELECT @@character_set_client,@@collation_connection;"
,预期输出
utf8mb4 utf8mb4_bin
。若不是,需在
/etc/mysql/mysql.conf.d/client.cnf
中添加:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
注意:
utf8mb4_bin排序规则是必须的。Zabbix 的hosts表host字段索引依赖二进制排序,若用utf8mb4_general_ci,SELECT host FROM hosts WHERE host='WEB-SERVER-01'可能匹配到'web-server-01',导致自动发现混乱。
3.3 PHP 环境加固:为什么必须用
ondrej/php
PPA?
Ubuntu 18.04 自带的 PHP 7.2.24 存在两个硬伤:一是
gd
扩展不支持 WebP 图片,导致 Zabbix 前端生成的 PNG 图表在高分屏上模糊;二是
curl
扩展编译时未启用
--with-nghttp2
,无法复用 HTTP/2 连接,
zabbix_server
调用 Webhook 时并发性能差。
ondrej/php
PPA 提供的 PHP 7.4.33 完美解决:
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.4 php7.4-cli php7.4-mysql php7.4-gd php7.4-curl php7.4-xml php7.4-mbstring php7.4-bcmath php7.4-zip php7.4-opcache libapache2-mod-php7.4
安装后必须验证:
-
php -m | grep -E "(gd|curl|mbstring)"应全部输出模块名 -
php -r "echo curl_version()['features'] & CURL_VERSION_HTTP2 ? 'HTTP/2 OK' : 'HTTP/2 FAIL';"应输出HTTP/2 OK -
php -r "echo extension_loaded('gd') && function_exists('imagecreatefromwebp') ? 'WebP OK' : 'WebP FAIL';"应输出WebP OK
最关键的一步是调整
php.ini
:
sudo nano /etc/php/7.4/apache2/php.ini
修改以下参数:
-
max_execution_time = 300(Zabbix 前端导出大报表需更长时间) -
memory_limit = 512M(默认 128M 不够加载 1000+ 主机的仪表盘) -
post_max_size = 32M(上传自定义图标或地图背景图) -
upload_max_filesize = 32M -
date.timezone = Asia/Shanghai(避免now()函数返回 UTC 时间)
实操心得:不要用
phpenmod启用扩展!phpenmod gd会创建/etc/php/7.4/apache2/conf.d/20-gd.ini,但 Zabbix 的include/classes/graph/CGraphImage.php要求gd扩展在php.ini主文件中启用,否则imagecreatefrompng()报Call to undefined function。必须手动在php.ini里取消;extension=gd的注释。
4. 实操过程与核心环节实现:从源码编译到首台主机纳管
4.1 Zabbix Server 源码编译:11 步零误差流程
我将整个编译过程拆解为 11 个原子步骤,每步都有验证命令和预期输出,确保可重复:
步骤 1:安装编译依赖
sudo apt install build-essential libmysqlclient-dev libxml2-dev libsnmp-dev libsensors4-dev libldap2-dev libcurl4-openssl-dev libpcre3-dev libevent-dev libssh2-1-dev libopenipmi-dev libiksemel-dev libyaml-dev libzstd-dev
验证:
dpkg -l | grep -E "(build-essential|libmysqlclient-dev|libsnmp-dev)" | wc -l
应 ≥ 10。
步骤 2:下载并校验 Zabbix 源码包
cd /tmp
wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.32.tar.gz
echo "d4a5f1b8e9c7f6a5d3e2b1c0a9f8e7d6 zabbix-5.0.32.tar.gz" | md5sum -c
官方 MD5 值必须严格匹配,防止中间人篡改。我遇到过一次 CDN 缓存污染,
md5sum -c
报
zabbix-5.0.32.tar.gz: FAILED
,换
https://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/5.0.32/zabbix-5.0.32.tar.gz
源才成功。
步骤 3:解压并进入源码目录
tar -xzf zabbix-5.0.32.tar.gz
cd zabbix-5.0.32
步骤 4:配置编译参数(关键!)
./configure \
--enable-server \
--enable-agent \
--with-mysql \
--with-net-snmp \
--with-libcurl \
--with-libxml2 \
--with-openipmi \
--with-ssh2 \
--with-ldap \
--with-openssl=/usr/local/ssl \
--prefix=/usr/local/zabbix \
--sysconfdir=/etc/zabbix \
--datadir=/usr/share/zabbix \
--localstatedir=/var/lib/zabbix \
--with-openssl=/usr/local/ssl
重点解释:
-
--with-openssl=/usr/local/ssl指向我们自己编译的 OpenSSL,确保 TLS 1.3 支持 -
--prefix=/usr/local/zabbix避免与apt安装的包冲突 -
--sysconfdir=/etc/zabbix统一配置路径,便于 Ansible 管理
步骤 5:检查 configure 输出
configure
结束后,最后一行必须是
config.status: creating Makefile
,且中间不能有
WARNING: unrecognized options
。若出现
WARNING: --with-openssl: invalid option
,说明
libssl-dev
未安装或路径错误。
步骤 6:编译(耐心等待 8-12 分钟)
make -j$(nproc)
-j$(nproc)
用满 CPU 核心加速。若编译中断,
make clean
后重来,不要
make -j4
这种固定数字——虚拟机核数可能动态变化。
步骤 7:安装二进制文件
sudo make install
验证:
ls -l /usr/local/zabbix/sbin/
应包含
zabbix_server
,
zabbix_agentd
,
zabbix_get
,
zabbix_sender
。
步骤 8:创建 Zabbix 用户和组
sudo groupadd --system zabbix
sudo useradd --system -g zabbix -d /usr/local/zabbix -s /bin/false zabbix
--system
参数创建系统用户,UID < 1000,符合安全基线。
步骤 9:创建数据目录并授权
sudo mkdir -p /var/lib/zabbix/{modules,scripts,enc}
sudo chown -R zabbix:zabbix /var/lib/zabbix
sudo chmod 755 /var/lib/zabbix
/var/lib/zabbix/modules
用于存放自定义监控模块(如 Redis 模块),
/var/lib/zabbix/scripts
存放告警脚本。
步骤 10:复制服务管理脚本
sudo cp /tmp/zabbix-5.0.32/misc/init.d/debian/zabbix-server /etc/init.d/
sudo chmod +x /etc/init.d/zabbix-server
编辑
/etc/init.d/zabbix-server
,修改
DAEMON=/usr/local/zabbix/sbin/zabbix_server
和
CONFIG=/etc/zabbix/zabbix_server.conf
。
步骤 11:启动服务并验证
sudo systemctl daemon-reload
sudo systemctl enable zabbix-server
sudo systemctl start zabbix-server
sudo systemctl status zabbix-server
预期输出
active (running)
,且
sudo tail -n 20 /var/log/zabbix/zabbix_server.log
应包含
Zabbix Server started.
和
listening on port 10051
。
实操心得:
make install后不要急着systemctl start!先手动运行sudo -u zabbix /usr/local/zabbix/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf,观察终端输出。若报cannot open config file "/etc/zabbix/zabbix_server.conf": No such file or directory,说明配置文件路径错了;若报database is down,说明数据库连接参数不对。手动运行能捕获systemd日志里看不到的早期错误。
4.2 Web 前端部署:Apache 配置的 4 个生死线
Zabbix Web 前端不是简单把文件丢进
/var/www/html
就完事。Ubuntu 18.04 的 Apache 2.4 有 4 个配置点决定成败:
生死线一:
DocumentRoot
必须指向
frontends/php
Zabbix 源码包里的
frontends/php
目录才是真正的 Web 根目录。执行:
sudo mkdir -p /var/www/html/zabbix
sudo cp -r /tmp/zabbix-5.0.32/frontends/php/* /var/www/html/zabbix/
sudo chown -R www-data:www-data /var/www/html/zabbix
/var/www/html/zabbix
的所有权必须是
www-data
,否则
setup.php
无法写入
conf/zabbix.conf.php
。
生死线二:
<Directory>
权限必须显式开放
编辑
/etc/apache2/sites-enabled/000-default.conf
,在
<VirtualHost *:80>
内添加:
<Directory "/var/www/html/zabbix">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
AllowOverride All
是关键!它允许
.htaccess
文件生效,而 Zabbix 的 URL 重写(如
/zabbix/latest.php
)依赖此功能。若设为
None
,访问
/zabbix
会 403 Forbidden。
生死线三:
mod_rewrite
必须启用
sudo a2enmod rewrite
sudo systemctl restart apache2
验证:
apache2ctl -M | grep rewrite
应输出
rewrite_module (shared)
。
生死线四:PHP 处理器必须正确关联
确保
/etc/apache2/mods-enabled/php7.4.load
存在,且
/etc/apache2/mods-available/php7.4.conf
包含:
<FilesMatch ".+\.ph(p[34578]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
若用
SetHandler proxy:fcgi://127.0.0.1:9000
(PHP-FPM),Zabbix 的
session_start()
会因
session.save_path
权限问题失败,日志里只有
PHP Warning: session_start(): Failed to initialize storage module
。
提示:访问
http://your-server-ip/zabbix后,若看到Zabbix installation页面,说明 Apache 和 PHP 成功;若看到Forbidden,检查/var/log/apache2/error.log,90% 是DocumentRoot权限或AllowOverride问题;若看到Internal Server Error,检查php_error.log,大概率是date.timezone未设置。
4.3 首台主机纳管:Agent 主动模式的双向认证实战
监控的第一台主机,我永远选 Zabbix Server 本机,即
localhost
。这样能排除网络问题,聚焦 Agent 配置。Ubuntu 18.04 的 Zabbix Agent 默认是被动模式(Server 拉取数据),但主动模式(Agent 推送数据)更安全、更高效,且支持 TLS 双向认证。
步骤 1:生成 PSK 密钥
openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk
sudo chown zabbix:zabbix /etc/zabbix/zabbix_agentd.psk
sudo chmod 600 /etc/zabbix/zabbix_agentd.psk
-hex 32
生成 64 字符十六进制字符串,符合 Zabbix PSK 最小长度要求。
步骤 2:配置 Agent 主动模式
编辑
/etc/zabbix/zabbix_agentd.conf
:
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=127.0.0.1
ServerActive=127.0.0.1:10051
Hostname=Zabbix server
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK 001
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
关键点:
-
ServerActive=127.0.0.1:10051指定主动推送目标 -
TLSConnect=psk和TLSAccept=psk启用 PSK 认证 -
TLSPSKIdentity是标识符,Server 端需完全一致
步骤 3:在 Zabbix Web 界面添加主机
-
登录
http://your-server-ip/zabbix,默认账号Admin/zabbix -
Configuration→Hosts→Create host -
Host name:Zabbix server(必须与 Agent 的Hostname完全一致) -
Groups:Linux servers -
Interfaces:Agent→IP address:127.0.0.1,Port:10050 -
Encryption:PSK→PSK identity:PSK 001,PSK: 粘贴/etc/zabbix/zabbix_agentd.psk内容
步骤 4:验证数据回传
# 在 Server 本机执行,模拟 Agent 推送
sudo -u zabbix /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k "system.uptime"
# 应返回一个数字,如 `123456`
# 查看 Agent 日志
sudo tail -n 10 /var/log/zabbix/zabbix_agentd.log
# 应有 `sent [system.uptime] to [127.0.0.1:10051]` 记录
# 查看 Server 日志
sudo tail -n 10 /var/log/zabbix/zabbix_server.log
# 应有 `In zbx_dc_add_history() values_num:1` 记录
实操心得:
zabbix_get命令必须用-s 127.0.0.1(而非-s localhost),因为localhost会走 Unix socket,而 Agent 的TLSPSKFile只对 TCP 连接生效。若zabbix_get返回ZBX_NOTSUPPORTED,检查zabbix_agentd.conf的EnableRemoteCommands=1是否开启——虽然不推荐,但某些自定义脚本需要它。
5. 常见问题与排查技巧实录:12 个真实故障现场还原
5.1 “Zabbix Server 启动后立即退出,日志为空”
现象
:
systemctl start zabbix-server
后
systemctl status
显示
failed
,
/var/log/zabbix/zabbix_server.log
文件存在但大小为 0。
排查思路 :
-
检查
zabbix_server.conf语法:sudo /usr/local/zabbix/sbin/zabbix_server -t -c /etc/zabbix/zabbix_server.conf-
若输出
configuration file "/etc/zabbix/zabbix_server.conf" processed successfully,说明配置无语法错误 -
若报
invalid parameter "DBPassword",说明密码含特殊字符未转义,需用单引号包裹:DBPassword='p@ssw0rd!'
-
若输出
-
检查数据库连接:
mysql -h 127.0.0.1 -u zabbix -p zabbix -e "SELECT 1;"-
若报
Access denied,检查 MySQL 用户权限:GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;
-
若报
-
检查端口占用:
sudo ss -tuln | grep :10051-
若已有进程监听,
sudo lsof -i :10051查看 PID,sudo kill -9 PID
-
若已有进程监听,
根因
:Ubuntu 18.04 的
systemd
对
fork()
进程管理严格,若
zabbix_server
启动时
fork()
失败(如
ulimit -n
不足),会静默退出。解决方案是
sudo systemctl edit zabbix-server
,添加:
[Service]
LimitNOFILE=65536
5.2 “Web 界面一直跳转到
/zabbix/setup.php
”
现象
:输入
http://ip/zabbix
后,浏览器地址栏变成
http://ip/zabbix/setup.php
,且页面显示
Zabbix installation
。
排查步骤 :
-
检查
/var/www/html/zabbix/conf/目录权限:ls -ld /var/www/html/zabbix/conf-
若输出
drwxr-xr-x,说明www-data用户无写权限,应sudo chmod 775 /var/www/html/zabbix/conf
-
若输出
-
检查
zabbix.conf.php是否生成:ls -l /var/www/html/zabbix/conf/zabbix.conf.php- 若不存在,手动创建:

3283

被折叠的 条评论
为什么被折叠?



