故障时间: 2025-11-29 08:55 - 09:09 故障系统: Zabbix 7.4 监控系统 故障现象: Zabbix 图表无法显示坐标轴和图例,仅显示绿色折线图 影响范围: 所有监控图表的可读性受到严重影响 故障等级: 中等(功能性故障,不影响数据采集)
# Zabbix Server 日志
tail -f /var/log/zabbix/zabbix_server.log结果: 仅显示正常的 housekeeper 清理任务,无异常错误
tail -f /var/log/php-fpm/error.log结果: 显示正常的进程重启,无明显错误
ls -la /usr/share/zabbix/assets/fonts/发现:
初步结论: 字体文件存在且权限正常,问题不在文件本身
tail -30 /var/log/nginx/error.log关键发现: 大量 PHP 错误信息
PHP Warning: imagettfbbox(): Could not find/open font
in /usr/share/zabbix/ui/include/graphs.inc.php on line 533
PHP Warning: imagettftext(): Could not find/open font
in /usr/share/zabbix/ui/include/graphs.inc.php on line 486错误频率: 每次加载图表产生数百条相同错误 错误位置: graphs.inc.php 的字体渲染函数
cat /usr/share/zabbix/ui/include/defines.inc.php | grep -i font配置内容:
define('ZBX_FONTPATH', realpath('assets/fonts'));
define('ZBX_GRAPH_FONT_NAME', 'simhei');
define('ZBX_FONT_NAME', 'simhei');问题识别:ZBX_FONTPATH 使用了相对路径 realpath('assets/fonts')
sed -n '480,490p' /usr/share/zabbix/ui/include/graphs.inc.php代码逻辑:
$ttf = ZBX_FONTPATH.'/'.ZBX_FONT_NAME.'.ttf';
imagettftext($image, $fontsize, $angle, $x, $y, $color, $ttf, $string);拼接结果:realpath('assets/fonts') + '/' + 'simhei' + '.ttf'
问题1:相对路径解析失败
realpath('assets/fonts') 在 PHP-FPM 环境下无法正确解析false 或空字符串问题2:字体路径拼接错误
ZBX_FONTPATH 解析失败时/simhei.ttf 或 simhei.ttf问题3:错误处理缺失
sudo sed -i "s|define('ZBX_FONTPATH',.*|define('ZBX_FONTPATH', '/usr/share/zabbix/assets/fonts'); // where to search for font|" /usr/share/zabbix/ui/include/defines.inc.php修改前:
define('ZBX_FONTPATH', realpath('assets/fonts'));修改后:
define('ZBX_FONTPATH', '/usr/share/zabbix/assets/fonts');sudo grep 'ZBX_FONT' /usr/share/zabbix/ui/include/defines.inc.php | head -3确认配置:
define('ZBX_FONTPATH', '/usr/share/zabbix/assets/fonts');
define('ZBX_GRAPH_FONT_NAME', 'simhei');
define('ZBX_FONT_NAME', 'simhei');sudo rm -rf /var/lib/php/opcache/*
sudo rm -rf /var/lib/php/session/*原因: PHP OPcache 会缓存已编译的配置文件,必须清除
sudo systemctl restart php-fpm
sudo systemctl restart nginx1. Zabbix 图表生成请求
↓
2. graphs.inc.php 调用 imageText() 函数
↓
3. 拼接字体路径:ZBX_FONTPATH + '/' + ZBX_FONT_NAME + '.ttf'
↓
4. 调用 PHP GD 库函数:imagettftext()
↓
5. GD 库尝试打开字体文件
↓
6. 成功:渲染文字 | 失败:产生 Warning,跳过文字渲染PHP-FPM 环境特性:
/realpath() 函数基于当前工作目录解析相对路径/ 目录下查找 assets/fonts 必然失败对比 Apache + mod_php:
GD 图像库的容错机制:
imagettftext() 失败时仅产生 Warning建议: 所有路径配置使用绝对路径
// 推荐
define('ZBX_FONTPATH', '/usr/share/zabbix/assets/fonts');
// 不推荐
define('ZBX_FONTPATH', realpath('assets/fonts'));建议: 配置 PHP 错误日志监控
# 添加到 Zabbix 监控项
log[/var/log/nginx/error.log,"imagettfbox|imagettftext",,,skip,\O]建议: 更新部署文档,明确说明:
此问题的解决方案适用于:
配置文件:/usr/share/zabbix/ui/include/defines.inc.php
代码文件:/usr/share/zabbix/ui/include/graphs.inc.php
字体目录:/usr/share/zabbix/assets/fonts/
错误日志:/var/log/nginx/error.log
PHP缓存:/var/lib/php/opcache/# 检查字体文件
ls -la /usr/share/zabbix/assets/fonts/simhei.ttf
# 检查配置
grep ZBX_FONT /usr/share/zabbix/ui/include/defines.inc.php
# 检查错误日志
tail -f /var/log/nginx/error.log | grep font
# 测试字体路径
php -r "echo '/usr/share/zabbix/assets/fonts' . '/' . 'simhei' . '.ttf';"操作系统:Linux
Web服务器:Nginx
PHP处理:PHP-FPM
Zabbix版本:7.4故障原因: Zabbix 字体路径配置使用相对路径,在 PHP-FPM 环境下无法正确解析
修复方法: 将 ZBX_FONTPATH 改为绝对路径 /usr/share/zabbix/assets/fonts
修复结果: 图表完全恢复正常,坐标轴和图例正确显示
修复时长: 30分钟(从故障发现到完全解决)
后续建议:
报告编制: YOUYOU 报告时间: 2025-11-29 09:09 报告版本: v1.0